この記事では、Python のソースコード内から任意のファイルを複製・移動する方法を紹介します。
ファイルを複製するには、以下のような関数を使います。
shutil.copy() | ファイルをコピーする |
---|---|
shutil.copy2() | メタデータを保持してコピーする |
ファイルを移動するには、以下のような関数を使います。
shutil.move() | 任意のディレクトリにファイルをコピーし、オリジナルを削除する |
---|
それでは、それぞれ使い方を見ていきましょう。
ファイルをコピーする
ファイルをコピーするには shutil
モジュール の copy()
関数 を使います。
shutil.copy(src, dst, *, follow_symlinks=True)
src引数 に指定したファイルを dst引数 に指定したファイル、またはディレクトリにコピーします。src と dst には、Pathオブジェクト、または文字列を指定します。
- 同名のファイルが存在していた場合、暗黙的に上書きされる
- メタデータはコピーしない
src引数 にディレクトリを指定した場合、IsADirectoryError
が発生します。
サンプル
試しに、同ディレクトリ内に存在している test.txt をデスクトップの dirディレクトリにコピーしてみます。
import shutil
# コピーするファイルのパス
file_path = 'test.txt'
# コピー先のディレクトリのパス
dir_path = '/Users/user/Desktop/dir'
# file_path を dir_path にコピー
shutil.copy(file_path, dir_path)
すると、以下のように test.txt が dirディレクトリ にコピーされました。

ちゃんと中身もコピーされています。
メタデータを保持しながらコピーする
先ほどの copy()
関数 ではメタデータ(作成時間や変更時間)はコピーされません。メタデータもコピーしたい場合は、shutil
モジュール の copy2()
関数 を使います。
shutil.copy2(src, dst, *, follow_symlinks=True)
使い方は copy()
関数と同じです。
サンプル
先ほどと同様のコードを copy2()
関数 使って実行してみます。
import shutil
# コピーするファイルのパス
file_path = 'test.txt'
# コピー先のディレクトリのパス
dir_path = '/Users/user/Desktop/dir'
# file_path を dir_path にコピー
shutil.copy2(file_path, dir_path)
すると、作成日と変更日が元のファイルと同じになっています。

僕の結果を見ただけではわからないと思うので是非実践してみてください。
ファイルを移動する
ファイルを移動するには shutil
モジュール の move()
関数 を使います。
shutil.move(src, dst, copy_function=copy2)
src引数 に指定したファイル、またはディレクトリを dst引数 に指定した場所に移動します。すでに同名のファイルが存在している場合、大体はエラーが発生しますが、OS によっては上書きされてしまうので注意が必要です。
サンプル
同ディレクトリ内にある test.py をデスクトップの dirディレクトリ に移動させます。
import shutil
# コピーするファイルのパス
file_path = 'test.txt'
# コピー先のディレクトリのパス
dir_path = '/Users/user/Desktop/dir'
# file_path を dir_path に移動
shutil.move(file_path, dir_path)
上記コードを実行すると dirディレクトリ には test.py がコピーされ、同ディレクトリ内の test.py は削除されました。