【SikuliX】【Python】コンテンツのコピー、移動、削除をしてみよう

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

スポンサーリンク