【SikuliX】【Python】ファイルパスの操作とコンテンツの存在確認

GUIを自動で操作するフリーツール:SikuliX ですが、Pythonの構文を使用して、ソースコード上でファイルパス、ファイル、フォルダの操作を行うことができます。

本記事では、パスの「参照」「分離」「結合」、コンテンツの「存在確認」の操作で使用できる構文について、まとめます。

スポンサーリンク

ファイルパスの操作

ファイルパスに対して可能な操作の例をまとめます。パス名を操作するには、「os」の中でも、「path」というモジュールを使用することになります。そのため、おまじないのように、以下のどちらかの1文は必ず記載してください。後者の方がよりピンポイントで「path」のモジュールのみを、前者の方が「os」に属するモジュール全てをインポートすることになります。

import os

もしくは、

import os.path

パスの抽出

特定のファイルパスから、ディレクトリパスが欲しい場合、もしくはファイル名のみ欲しい場合は、以下が有効です。

ディレクトリパス

os.path.dirname()を使用します。

コードサンプル:

import os

file_path = “C:/dir/dir1/file1-1.txt”

print(os.path.dirname(file_path))

実行結果:

C:/dir/dir1

ファイル名

os.path.basename()を使用します。

コードサンプル:

import os

file_path = “C:/dir/dir1/file1-1.txt”

print(os.path.basename(file_path))

実行結果:

file1-1.txt

パスの分離

こちらも特定のファイルパスから、ディレクトリパスが欲しい場合、もしくはファイル名のみ欲しい場合に用います。以下の特徴は、上記の「os.path.dirname()」「os.path.basename()」とは異なり、ディレクトリパスとファイル名をリストとして、同時に所持するという点です。

ディレクトリパスとファイル名の分離

os.path.split()を使用します。

コードサンプル:

import os

file_path = “C:/dir/dir1/file1-1.txt”

print(os.path.split(file_path)[0])

print(os.path.split(file_path)[1])

実行結果:

C:/dir/dir1

file1-1.txt

ファイル拡張子前後で分離

os.path.splitext()を使用します。os.path.splittext()ではないので、注意してください。

コードサンプル:

import os

file_path = “C:/dir/dir1/file1-1.txt”

print(os.path.splitext(file_path)[0])

print(os.path.splitext(file_path)[1])

実行結果:

C:/dir/dir1/file1-1

.txt

スポンサーリンク

パスの結合

特定のファイルパスから、ディレクトリパスが欲しい場合、もしくはファイル名のみ欲しい場合は、以下が有効です。

ディレクトリパスとファイル名の結合

join()を使用します。以下のように、join()では「/」が自動で追加される点に注意してください。

コードサンプル:

import os

dir_path = “C:/dir/dir1/”

file = “file1-1.txt”

print(os.path.join(dir_path, file))

実行結果:

C:/dir/dir1/file1-1.txt

存在するコンテンツの確認

存在するコンテンツの確認方法をまとめます。存在しているかどうかを判断するものなので、値はBoolean型で返され、TrueもしくはFalseで判断されます。そのため、条件分岐(if文)の条件式にも使用することが可能です。

使用するモジュールはパス名操作と同様で、「os.path」です。ここでの説明は以下のフォルダー構成を基に記載します。

C(ドライブ)
|–
dir(フォルダー)
        |– dir1(フォルダー)
                |– dir1-1(フォルダー)
                |– file1-1.txt(ファイル)

ファイル、フォルダ双方に対応

os.path.exists()を使用します。

コードサンプル:

import os

file_path_true = “C:/dir/dir1/file1-1.txt”
dir_path_true = “C:/dir/dir1”
file_path_false = “C:/dir/dir2/file2-1.txt”
dir_path_false = “C:/dir/dir2”

print(os.path.exists(file_path_true))
print(os.path.exists(dir_path_true))
print(os.path.exists(file_path_false))
print(os.path.exists(dir_path_false))

実行結果:

True
True
False
False

スポンサーリンク

ファイルのみに対応

os.path.isfile()を使用します。

コードサンプル:

import os

file_path = “C:/dir/dir1/file1-1.txt”
dir_path = “C:/dir/dir1”

print(os.path.isfile(file_path))
print(os.path.isfile(dir_path))

実行結果:

True
False

フォルダのみに対応

os.path.isdir()を使用します。

コードサンプル:

import os

file_path = “C:/dir/dir1/file1-1.txt”
dir_path = “C:/dir/dir1”

print(os.path.isdir(file_path))
print(os.path.isdir(dir_path))

実行結果:

False
True

存在するコンテンツの列挙

指定したディレクトリに存在しているコンテンツを全て列挙して表示することができます。

コンテンツのリスト表示

os.listdir()を使用します。os.pathのモジュールではないので、注意してください。

コードサンプル:

import os

dir_path = “C:/dir/dir1”

print(os.listdir(dir_path))

実行結果:

[‘dir1-1’, ‘file1-1.txt’]

まとめ

いかがでしたでしょうか?

画像認識だけでは「解像度が変わった」「ブラウザの表示倍率が変わった」「対象のツールのUIが変更された」などの要因により、正しく認識されなくなることがあります。そこで、実行環境の影響を少しでも得にくくすることを考えるかもしれません。

SikuliXはPythonの構文が使用できるため、上記のようなコードのみで解決できる可能性があります。GUIで行う操作とコードで済ます操作を上手く使い分けると、良いかと思います。ぜひ色々な使い方を模索してみて下さい。

参考

↓↓パスの指定でエラーとなる場合はこちら↓↓
【SikuliX/Python】パスの指定をしてみよう

スポンサーリンク