Python ファイルのコピーと移動
ここでは Python でファイルのコピーと移動をする方法についてご説明します。
Python でファイルをコピーする
Python でファイルをコピーするには何通りも方法があります。
良く使われるのは、shutil モジュールの copyfile()、copy()、copy2() 関数があります。
どの関数も、関数名("コピー元のパス&ファイル名","コピー先のパス&ファイル名") のように使えますが、少しだけ違いがあります。
3 つの関数の主な違いは以下の通りです。
copyfile() はファイルのデータをコピーしますが、パーミッションやメタデータはコピーしません。
copy() はファイルのデータとパーミッションもコピーします。
copy2() はファイルのデータとパーミッションに加え、ファイルの作成時間や変更時間などのメタデータもコピーします。
また、copyfile() はコピー先にファイル名まで指定しなければなりませんが、copy() と copy2() はコピー先としてディレクトリのパスのみを指定することができます。
例えば、copyfile() を使って、test1.txt というファイルをコピーして、dir1 ディレクトリの中に text2.txt というファイルを生成したい時には次のようにできます。
import shutil
shutil.copyfile("test1.txt", "dir1/test2.txt")
実行すると次のようになり、test1.txt のコピーが dir1 ディレクトリに text2.txt という名前で生成されました。
ファイルの変更日時は元のファイルからコピーされず、ファイルをコピーした日時になっています。
ファイルのメタデータもコピーしたい時は copy2() 関数を使います。ディレクトリのみを指定してコピーしてみます。
import shutil
shutil.copy2("test1.txt", "dir1/")
実行すると次のようになり、test1.txt のコピーが dir1 ディレクトリに同じ名前で生成されました。
今回はファイルの変更日時もコピーされていますね。
どの関数も、コピー先に同じファイル名のファイルが存在する場合は、エラーにならず、そのファイルを上書きしますのでご注意ください。
Python でファイルを移動する
Python でファイルを移動するには、shutil モジュールの move() や、os モジュールの replace()、rename() 関数などが使えます。
どの関数も、関数名("移動元のパス&ファイル名","移動先のパス&ファイル名") のように使えます。
そして、移動先に指定したディレクトリが存在しないと FileNotFoundError のエラーになります。
移動先のファイル名を違う名前にすると、名前が変更されてファイルが移動します。
ここまでは同じでしたが、この 3 つの関数には次のような違いがあります。
shutil モジュールの move() 関数では、移動先にディレクトリだけを指定することも可能です。
os モジュールの replace() と rename() 関数は移動先にファイルまで指定しなくてはなりません。
os モジュールの replace() は、移動先のファイルが存在する場合は置き換えます。
os モジュールの rename() は、移動先が存在すると Windows ではエラーになり、Unix や Mac では置き換えられます。
shutil モジュールの move() は、移動先が同じファイルシステム上にある場合は os モジュールの rename() を使用するため、移動先にファイルまで指定した場合は rename() と同じです。
移動先にディレクトリしか指定しなかった場合は、移動先に移動元と同じ名前のファイルがあるとエラーになります。
移動先がクロスプラットフォーム(例えば Windows から Mac など)になる場合は replace() を使用します。
では、shutil モジュールの move() 関数を使って、ファイルを移動させてみましょう。
実行するコードが保存されているファイルと同じディレクトリにある test4.txt ファイルを archive ディレクトリに内に移動させたい時は次のようにできます。
import shutil
shutil.move("test4.txt", "archive/test4.txt")
#shutil.move("test4.txt", "archive/")
上のコードを実行すると、test4.txt ファイルを archive ディレクトリに移動しました。
以上、Python でファイルのコピーと移動をする方法についてご説明しました。