shutilモジュールはファイル・フォルダのコピー(copy、copytree)や移動(move)、削除(rmtree)するのに使えます。特に中身が入ったフォルダでも操作可能というのが特徴だと思います。本記事ではこのモジュールの使い方についてまとめます。
確認した環境
- OS: Ubuntu 16.04LTS
- Python: ver3.7.2
前提となるディレクトリ構成
ファイル・フォルダのコピー
ファイルをコピーするには、shutil.copy()関数を用います。
- コピー元を第一引数srcに、コピー先を第二引数dstに指定します。
- dstがディレクトリの場合は、srcで指定したファイルパスのベース名を使ってコピーされます。(=同じファイル名でコピー)
- 返り値は、新しく作成したファイルのパスです。
以下に例を示します。
別名でコピーするには、第二引数dstに新しいファイル名を指定します。
尚、copy() はファイルのデータとパーミッションをコピーしますが、その他のファイルの作成時間や変更時間などのメタデータはコピーしません。
コピー元のファイルのメタデータを保存したい場合は、 copy2()メソッド を使います。
コピー元ファイル
コピー後ファイル
copy2()メソッドでコピーしたファイル(file03.txt)はファイル生成時間もコピーされていることがわかります。
フォルダの中身ごとコピー
ところで、上記のcopy()メソッドは中身が入っているフォルダをコピーしようとするとエラーになります。(下記参照)
そこで、フォルダの中身ごとコピーするには、shutil.copytree()関数を使います。コピー元とコピー先の引数設定はcopy()メソッドと同様です。
ファイル・フォルダの移動
shutil.move()関数を使うと、指定したファイルやフォルダを別の場所に移動します。移動元と移送先の引数設定はcopy()メソッドと同様です。
指定した移動先が既に存在しているディレクトリの場合は、ファイルはそのディレクトリの内部に移動されます。移動先が既に存在しているがディレクトリでない場合は、ファイル名を変えて指定のフォルダへ移動されます。
ファイル・フォルダの削除
- ファイル個別を削除するには、os.remove()やos.unlink()を使います。
- 空のフォルダを削除するにはos.rmdir()を使います。
shutil.rmtree()関数は、フォルダの中身ごと削除します。削除したいディレクトリパスを引数に設定します。
<参考記事>osモジュールを使ったファイル・フォルダの削除(os.remove、os.unlink、 os.rmdir)
まとめ
shutilモジュールを使った、フォルダ・ファイルのコピー、移動、削除の方法についてまとめました。
コメント
[…] (C)ファイルのコピーは、shutilモジュールを使う。 下記のWEBページにお世話になりました。ありがとうございます。 ・[Python] フォルダやファイルのコピー、移動、削除(shutilモジュール) […]