Python でファイルをコピーする方法
-
Python でファイルをコピーする Shutil
copyfile()メソッド -
パーミッションでファイルをコピーする Shutil
copy()メソッド -
copy()メソッドとcopyfile()メソッドの比較 -
ファイルオブジェクトをコピーするための
copyfileobj()メソッド -
メタデータを保存するための
copy2()メソッド - Python でファイルをコピーする方法のまとめ
Python には、ファイル I/O 操作(OS、サブプロセス、shutil など)をサポートするいくつかのアウトオブボックスモジュールが付属しています。shutil モジュールを使ってファイルやディレクトリをコピーします。ファイルやディレクトリの複製、転送、削除などの操作は、このユーティリティ関数を使って完了します。ここでは、以下の 4つの方法について説明します。
Python でファイルをコピーする Shutil copyfile() メソッド
コピー元の素材をコピー先の名前のファイルにコピーします。コピー先が書き込み可能でない場合、コピー処理中に IOError 例外が発生します。コピー元のファイルとコピー先のファイルが同じ場合は SameFileError が返る。コピー元とコピー先のパス名は文字列として提供されます。
copyfile(source_file, destination_file)
文字やブロックデバイスやパイプはこのメソッドではサポートされていません。
import shutil
source = r"C:\Users\DelftStack\Documents\test\test.txt"
destination = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copyfile(source, destination)
パーミッションでファイルをコピーする Shutil copy() メソッド
copy() メソッドは Unix のコマンド cp のように動作します。内容をコピーすると、このメソッドはターゲットファイルのパーミッションをソースファイルと同期させます。同じファイルをコピーしている場合、SameFileError もスローされます。構文は以下の通りです。
shutil.copy(src_file, dest_file, *, follow_symlinks=True)
Shutil の copy() メソッドでファイルをコピーする例
import shutil
src = r"C:\Users\DelftStack\Documents\test\test.txt"
des = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copy(src, des)
copy() メソッドと copyfile() メソッドの比較
copy()メソッドは内容をコピーする際にファイルのパーミッションを設定することが多いが、copyfile()はデータのみをコピーします。- 基本的に、
copyfile()メソッドの実装では、copyfileobj()メソッドを用います。これに対して、copy()メソッドは関数copyfile()とcopymode()を用います。 - 上記の点から、
copyfile()の方がcopy()よりも若干高速であることがわかります。
ファイルオブジェクトをコピーするための copyfileobj() メソッド
この関数は対象のパスまたはファイルのオブジェクトにファイルをコピーします。コピー先のオブジェクトがファイルオブジェクトの場合は、copyfileobj() を直接呼び出してからファイルを閉じる必要があります。バッファサイズはバッファの長さを指定するのに用います。これはコピーの過程でメモリに保持されるバイト数です。
以下に copyfileobj() メソッドの構文を示します。
shutil.copyfileobj(src_file_object, dest_file_object[, length])
import shutil
filename1 = r"C:\Users\DelftStack\Documents\test\test.txt"
fileA = open(filename1, "rb")
filename2 = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
fileB = open(filename2, "wb")
shutil.copyfileobj(fileA, fileB)
メタデータを保存するための copy2() メソッド
copy2() メソッドは copy() メソッドに似ていますが、ファイルの内容をコピーするだけでなく、ソースファイルのメタデータをすべて保存します。
shutil.copy2(src_file, dest_file, *, follow_symlinks=True) メソッドは copy() メソッドと似ています。
import shutil
src = r"C:\Users\DelftStack\Documents\test\test.txt"
des = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copy2(src, des)
Python でファイルをコピーする方法のまとめ
最終的には、すべてのメソッドの表が添付されており、shutil ユーティリティをよりよく理解するのに役立ちます。
| 関数 | メタデータのコピー | コピー許可 | バッファが使える | 宛先はディレクトリの場合もあります。 |
|---|---|---|---|---|
shutil.copy |
いいえ | はい | いいえ | はい |
shutil.copyfile |
いいえ | いいえ | いいえ | 否 |
shutil.copy2 |
はい | はい | 否 | はい |
shutil.copyfileobj |
いいえ | いいえ | はい | いいえ |