【SikuliX】【Python】パスの指定をしてみよう

GUIを自動で操作するフリーツール:SikuliX ですが、単にGUIの自動化というだけではなく、ソースコード上でパスの指定やコピー操作を行うことができます。バッチファイルやコマンドプロンプトで同様の操作を行うのと同じことができると思って下さい。

本記事では、パス指定の行い方について記載します。

スポンサーリンク

パスの指定方法

パスの指定をしてみましょう。以下はPythonで「C:\sample\dir」のフォルダー内に存在する「ファイル」「フォルダ」のリストを表示させるコードを書いたとしましょう。

import os

print(os.listdir(‘C:\sample\dir\’))

これを実行すると、以下のエラーが表示されます。

[error] SyntaxError ( “no viable alternative at input ‘\\n'”, )

これは、円マーク(バックスラッシュ)をエスケープシーケンスと捉えられてしまうためです。そのため、Pythonのソースコード上ではWindowsでのパスをそのまま使用することはできません。これを回避するためには、以下のいずれかの方法を行う必要があります。

エスケープシーケンスの「\」を重ねる

以下のように、「\」を追加します。

import os

print(os.listdir(‘C:\\sample\\dir\\’))

「\」を「/」に置き換える

以下のように、Pythonのパスの表記に変更します。

import os

print(os.listdir(‘C:/sample/dir/’))

raw文字列を利用する

raw文字列を使用すると、「\」を1つの文字として扱うようになります。そのため、エスケープシーケンスと判断されることはなくなります。コード上では、「r」もしくは「R」を利用して以下のように記載します。

import os

print(os.listdir(r’C:\sample\dir’))

import os

print(os.listdir(R’C:\sample\dir’))

ただし、raw文字列を使用する際は、注意点があります。

それは、文字列の最後に「\」を使えないということです。使った場合は、先述のエラーが表示されることになります。もし使いたい場合は、以下のように記載すると良いでしょう。エスケープシーケンスを使用して記載された文字列と連結させる方法です。

import os

print(os.listdir(r’C:\sample\dir’+’\\’))

スポンサーリンク

どの方法が良いのか?

ここで、実際にどの方法を使用するのが、良いのか?ということを考えるかもしれません。

エスケープシーケンスの方法ですと、「\」の数が多ければ多いほど誤記が発生するかもしれません。確認する際も苦労することでしょう。また、「誰にでも簡単に利用できるように」ということを考えれば、コードに不慣れな場合はこの点は特に欠点になるかもしれません。一番楽なのは、一括変換などで「\」を「/」に置き換えることかもしれません。慣れてきたら、raw文字列を使う方法が良いと思います。

シングルコーテーションか?ダブルコーテーションか?
Pythonの文法上は、シングルとダブルの明確な使い分け(違い)はありません。そのため、文字列の中で、ダブルコーテーションを使用したければシングルコーテーションで括るという使い分けをすると良いと思います。
管理者権限が必要な場合
指定したパスにアクセス権がない場合、エラーが表示されて意図した処理ができない場合があります。その場合は、SikuliXを管理者権限で起動してみて下さい。ソースコード上に記載された処理が管理者権限で実行できるようになります。これにより、エラーが発生せず、意図した処理を実施することができるようになります。

まとめ

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

「画像で判定する」ということは、環境が変わることで、画像の認識が正確に行われないこともあるということです。例えば、「解像度などが異なる環境」「ブラウザの表示倍率が設定の画像と異なる環境」「対象のツールのUIが変更された場合」などです。実際に動かしている時に、これらの環境下で認識されなくなることがありました。

SikuliXを使うからと言って、全てGUI操作で解決しようとしていませんか?GUIを使わなくても済むケースも多々あると思っています。SikuliXはPythonの構文が使用できます。ということは、PythonのコードでできることはGUIを操作しなくてもコードのみで解決できる可能性があるとも言えます。視野を広げてGUIで行うべきものとソースコード上で行ってしまうものを使い分けると、面白いかもしれません。SikuliXは画像認識で自動化できる便利なものですが、その反面、画像認識で失敗した時は意図したとおりに動きません。単にGUI操作の自動化ツールというだけではなくて、ぜひ色々な使い方を模索してみて下さい。

スポンサーリンク