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】パスの指定をしてみよう