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")

Python ファイルのコピーと移動 1

実行すると次のようになり、test1.txt のコピーが dir1 ディレクトリに text2.txt という名前で生成されました。

ファイルの変更日時は元のファイルからコピーされず、ファイルをコピーした日時になっています。

Python ファイルのコピーと移動 2


ファイルのメタデータもコピーしたい時は copy2() 関数を使います。ディレクトリのみを指定してコピーしてみます。

import shutil

shutil.copy2("test1.txt", "dir1/")

実行すると次のようになり、test1.txt のコピーが dir1 ディレクトリに同じ名前で生成されました。

今回はファイルの変更日時もコピーされていますね。

Python ファイルのコピーと移動 3

どの関数も、コピー先に同じファイル名のファイルが存在する場合は、エラーにならず、そのファイルを上書きしますのでご注意ください。

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 ディレクトリに内に移動させたい時は次のようにできます。

Python ファイルのコピーと移動 4

import shutil

shutil.move("test4.txt", "archive/test4.txt") 
#shutil.move("test4.txt", "archive/")

上のコードを実行すると、test4.txt ファイルを archive ディレクトリに移動しました。

Python ファイルのコピーと移動 5


以上、Python でファイルのコピーと移動をする方法についてご説明しました。

© 2024 やさしい Python 入門