この記事では、Pythonで任意のファイルを複製(コピー)、または移動する方法を紹介します。
ファイルをコピーするにはshutil
モジュールのcopy()
関数を使います。
構文
shutil.copy(src, dst, *, follow_symlinks=True)
引数
src | コピーしたいファイルの名前(パス) |
---|---|
dst | コピー先のファイル名、またはディレクトリ名(パス) |
follow_symlinks | follow_symlinks が偽で、src がシンボリックリンクの場合、 dst はシンボリックリンクとして作成されます。 follow_symlinks が真で src がシンボリックリンクの場合、 dst には src のリンク先のファイルがコピーされます。 |
戻り値の型
dst
引数が返される。(文字列型)
解説
ファイルsrc
をdst
にコピーします。
dst
がディレクトリだった場合、src
の名前でディレクトリ内にコピーされます。dst
が既に存在しているファイル名だった場合は、コピーに置き換えられます。
注意
ファイルのデータとパーミッションをコピーしますが、メタデータはコピーしません。メタデータまでコピーしたい場合は、次に紹介するcopy2()
を参照してください。
例外
src
引数にディレクトリを指定した場合、IsADirectoryError
例外が発生します。例 text
ディレクトリに存在しているtestText.txt
をcopy_testText.txt
としてコピーしてみる:
from shutil import copy
# コピーするファイルのパス
file_path = 'text/testText.txt'
# コピー先のパス
copy_path = 'copy_testText.txt'
# file_path を copy_path にコピー
copy(file_path, copy_path)
すると、以下のようにcopy_testText.txt
がカレントディレクトリにコピーされました。
ちゃんと中身もコピーされています。
先ほどのcopy()
関数 ではメタデータ(作成時間や変更時間)はコピーされません。メタデータもコピーしたい場合は、shutil
モジュールのcopy2()
関数を使います。
shutil.copy2(src, dst, *, follow_symlinks=True)
使い方はcopy()
関数と全く同じなので例だけ見てみましょう。
例 copy()
関数の時と同様のコードをcopy2()
関数を使って実行してみます。
from shutil import copy2 # 変更
# コピーするファイルのパス
file_path = 'text/testText.txt'
# コピー先のパス
copy_path = 'copy2_testText.txt' # 変更
# file_path を copy_path にコピー
copy2(file_path, copy_path)
僕の環境(Wondows11, Python 3.11)では更新日だけコピーできました。 高水準のファイルコピー関数(shutil.copy()
, shutil.copy2()
)でも、ファイルのメタデータの全てをコピーすることはできないらしいので注意してください。
高速でコピーしたい場合は、shutil.copyfile()
関数を使います。この関数は最も効率的な方法でコピーを行いますが、代わりにdst
引数に必ずファイル名を指定する必要があります。
shutil.copyfile(src, dst, *, follow_symlinks=True)
例外
src
とdst
が同じファイルだった場合にSameFileError
を送出するdst
で指定されたファイルが書き込み不可の場合にOSError
例外を送出する例 使い方はdst
にファイルを指定しなければならないこと以外同じです:
from shutil import copyfile
# コピーするファイルのパス
file_path = 'text/testText.txt'
# コピー先のパス
copy_path = 'copy_testText.txt'
# file_path を copy_path にコピー
copyfile(file_path, copy_path)
ファイルを移動するにはshutil
モジュールのmove()
関数を使います。
shutil.move(src, dst, copy_function=copy2)
src
引数に指定したファイル、またはディレクトリをdst
引数に指定した場所に移動します。copy_function
引数には、コピー時に使用する関数を指定します。同名のファイルが存在している場合、大体はエラーが発生しますが、OSによっては上書きされてしまうので注意が必要です。
例 textディレクトリ内にあるtestText.txt
をカレントディレクトリに移動させます。
from shutil import move
import os
# 移動するファイルのパス
file_path = 'text/testText.txt'
# file_pathをカレントディレクトリに移動
move(file_path, os.getcwd())
Linkファイルのパスを取得する方法
この記事では、Pythonでファイルをコピー、または移動させる方法を解説しました。
ここで紹介した関数以外にもshutil
モジュールにはファイルやファイルの集まりに対する高水準な関数が用意されています。ファイル操作がしたいなと思ったらぜひとも使ってみてください。
外部Linkshutil --- 高水準のファイル操作 — Python 3.12.0 ドキュメント
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ