GUIを自動で操作するフリーツール:SikuliX ですが、Pythonの構文を使用して、ソースコード上でファイルパス、ファイル、フォルダの操作を行うことができます。
本記事では、コンテンツの「コピー」「移動」「削除」の操作で使用できる構文について、まとめます。
コンテンツの操作
コンテンツの操作を行う際は、「shutil」というモジュールを使用することになります。そのため、このモジュールをあらかじめインポートしておかなくてはいけません。このモジュールを使うことで、コンテンツのコピー、移動、削除などの操作ができるようになります。
import shutil
コンテンツのコピー
コンテンツをコピーしたい場合は、コピーする内容によって、以下のいくつかの方法があります。注意すべきは、コピー先に同名のコンテンツがあった場合、上書きされてしまうことです。これを回避するには、あらかじめバックアップを取っておく必要があります。
以下では「file_path」に設定したファイルを「dir_to」にコピーしています。コピー先は、ディレクトリでもファイル名を記載しても問題なく動作します。拡張子も指定できるため、上記バックアップを行う場合は、ファイル名を変更することで対応することが可能です。
また、コピーでは以下のフォルダー構成を基準に記載していきます。
C(ドライブ)
|– dir(フォルダー)
|– dir1(フォルダー)
|– dir1-1(フォルダー)
|– file1-1.txt(ファイル)
ファイルのみをコピー
shutil.copyfile()を使用します。
コードサンプル:
import shutil
file_path = “C:/dir/dir1/file1-1.txt”
dir_to = “C:/dir”shutil.copyfile(file_path, dir_to)
実行結果:
C(ドライブ)
|– dir(フォルダー)
|– dir1(フォルダー)
| |– dir1-1(フォルダー)
| |– file1-1.txt(ファイル)
|
|– file1-1.txt(ファイル)
ファイルとアクセス権限をコピー
shutil.copy()を使用します。アクセス権限と言っても、ユーザーのアクセス権限ではなく、プロパティにあるの「読み取り専用」の有効無効の設定になります。
コードサンプル:
import shutil
file_path = “C:/dir/dir1/file1-1.txt”
dir_to = “C:/dir/dir1/dir1-1/file_copy.txt”shutil.copyfile(file_path, dir_to)
実行結果:
C(ドライブ)
|– dir(フォルダー)
|– dir1(フォルダー)
|– dir1-1(フォルダー)
| |– file_copy.txt(ファイル)
|– file1-1.txt(ファイル)
ファイル、アクセス権限、その他メタ情報をコピー
shutil.copy2()を使用します。上記に加え、その他メタ情報もコピーされます。
コードサンプル:
import shutil
file_path = “C:/dir/dir1/file1-1.txt”
dir_to = “C:/dir/dir1/dir1-1/file_copy2.txt”shutil.copyfile(file_path, dir_to)
実行結果:
C(ドライブ)
|– dir(フォルダー)
|– dir1(フォルダー)
|– dir1-1(フォルダー)
| |– file_copy2.txt(ファイル)
|– file1-1.txt(ファイル)※ファイルの実態とアクセス権限、その他メタ情報がコピーされます。
サブディレクトリを含む階層のコピー
shutil.copytree()を使用します。ただし注意点があり、以下の「dir_to」を「dir_to = “C:/dir”」とすると、同名ファイル(コンテンツ)が存在すると言われ、エラーになります。この点さえ気を付ければ、コピー先のフォルダー名を指定することも可能です。
コードサンプル:
import shutil
dir_from = “C:/dir/dir1”
dir_to = “C:/dir/dir_copy”shutil.copytree(dir_from, dir_to)
実行結果:
C(ドライブ)
|– dir(フォルダー)
|– dir1(フォルダー)
| |– dir1-1(フォルダー)
| |– file1-1.txt(ファイル)
|
|– dir_copy(フォルダー)
|– dir1-1(フォルダー)
|– file1-1.txt(ファイル)
コンテンツの移動
コンテンツを移動したい場合は、以下の方法を利用します。
移動では以下のフォルダー構成を基準に記載していきます。
C(ドライブ)
|– dir(フォルダー)
|– dir1(フォルダー)
| |– dir1-1(フォルダー)
| |– file1-1.txt(ファイル)
|
|– dir2(フォルダー)
フォルダとファイルの移動
shutil.move()を使用します。ファイルを移動したい場合はファイルパスを、ディレクトリを移動したい場合はディレクトリパスを指定すれば、移動させることができます。ディレクトリの移動の場合は、存在しないディレクトリを作成してくれます。ただし注意点もあり、内容はディレクトリのコピーと同様です。同名のフォルダーを指定できず、エラーになります。
コードサンプル:
import shutil
dir_from = “C:/dir/dir1”
dir_to = “C:/dir/dir2”shutil.move(dir_from, dir_to)
実行結果:
C(ドライブ)
|– dir(フォルダー)
|– dir2(フォルダー)
|– dir1(フォルダー)
|– dir1-1(フォルダー)
|– file1-1.txt(ファイル)
コンテンツの削除
コンテンツを削除する場合は、対象によってインポートするモジュールが異なります。対象がファイルの場合は「os」を、ディレクトリの場合は「shutil」をインポートします。「os」のモジュールでは、1度の削除になり、対象は単体になります。サブディレクトリも削除することになると、繰り返しの(再帰的な)削除が必要になります。この場合は、「shutil」を利用しないと実施が不可能になるためです。
削除では以下のフォルダー構成を基準に、構文を記載します。
C(ドライブ)
|– dir(フォルダー)
|– dir1(フォルダー)
|– dir1-1(フォルダー)
|– file1-1.txt(ファイル)
ファイルの削除
os.remove()を使用します。
コードサンプル:
import os
file_path = “C:/dir/dir1/file1-1.txt”
os.remove(file_path)
実行結果:
C(ドライブ)
|– dir(フォルダー)
|– dir1(フォルダー)
|– dir1-1(フォルダー)
サブディレクトリを含む階層の削除
shutil.rmtree()を使用します。
コードサンプル:
import shutil
dir_path = “C:/dir/dir1/”
shutil.rmtree(dir_path)
実行結果:
C(ドライブ)
|– dir(フォルダー)
まとめ
今回は、ファイルのコピー/移動/削除について、記載しました。本文でも記載しましたが、バックアップ作成などにも役立つ内容です。
SikuliXはPythonの構文が使用できるので、その利点を存分に活用してみましょう。ぜひ色々な使い方を模索してみて下さい。
参考
↓↓パスの指定でエラーとなる場合はこちら↓↓
【SikuliX/Python】パスの指定をしてみよう