Pythonでファイルをコピーするにはどうすればよいですか?
os
モジュールの下に何も見つかりませんでした。
Pythonでファイルをコピーするにはどうすればよいですか?
os
モジュールの下に何も見つかりませんでした。
shutil
には、使用できる多くの方法があります。そのうちの1つは次のとおりです。
import shutil
shutil.copyfile(src, dst)
# 2nd option
shutil.copy(src, dst) # dst can be a folder; use shutil.copy2() to preserve timestamp
src
ますdst
。と は両方ともsrc
、dst
パスを含むファイルの完全なファイル名である必要があります。IOError
例外が発生します。dst
は、置き換えられます。copy
、 sとして指定されたパス名です。src
dst
str
もう 1 つのshutil
方法は、 ですshutil.copy2()
。似ていますが、より多くのメタデータ (タイム スタンプなど) を保持します。
os.path
操作を使用する場合は、copy
ではなく使用してくださいcopyfile
。copyfile
文字列のみを受け入れます。
関数 | メタデータをコピーします |
アクセス許可をコピーする |
ファイルオブジェクトを使用 | 宛先 はディレクトリの可能性があります |
---|---|---|---|---|
shutil.copy | いいえ | はい | いいえ | はい |
shutil.copyfile | いいえ | いいえ | いいえ | いいえ |
shutil.copy2 | はい | はい | いいえ | はい |
shutil.copyfileobj | いいえ | いいえ | はい | いいえ |
copy2(src,dst)
copyfile(src,dst)
多くの場合、次の理由よりも便利です。
dst
にすることができます。その場合、新しいファイルの作成に のベース名が使用されます。src
以下に短い例を示します。
import shutil
shutil.copy2('/src/dir/file.ext', '/dst/dir/newname.ext') # complete target filename given
shutil.copy2('/src/file.ext', '/dst/dir') # target filename is /dst/dir/file.ext
shutil
パッケージのコピー機能のいずれかを使用できます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 機能 保持 サポート コピーを受け入れる その他 パーミッション ディレクトリ dest. ファイル obj メタデータ ―――――――――――――――――――――――――――――――――――――――――――――――――― ―――――――――――――――――――――――――――― shutil.copy ✔ ✔ ☐ ☐ shutil.copy2 ✔ ✔ ☐ ✔ shutil.copyfile ☐ ☐ ☐ ☐ shutil.copyfileobj ☐ ☐ ✔ ☐ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
例:
import shutil
shutil.copy('/etc/hostname', '/var/tmp/testhostname')
以下の例に示すように、ファイルのコピーは比較的簡単な操作ですが、代わりにshutil stdlib モジュールを使用する必要があります。
def copyfileobj_example(source, dest, buffer_size=1024*1024):
"""
Copy a file from source to dest. source and dest
must be file-like objects, i.e. any object with a read or
write method, like for example StringIO.
"""
while True:
copy_buffer = source.read(buffer_size)
if not copy_buffer:
break
dest.write(copy_buffer)
ファイル名でコピーしたい場合は、次のようにすることができます。
def copyfile_example(source, dest):
# Beware, this example does not handle any edge cases!
with open(source, 'rb') as src, open(dest, 'wb') as dst:
copyfileobj_example(src, dst)
shutil モジュールを使用します。
copyfile(src, dst)
src という名前のファイルの内容を dst という名前のファイルにコピーします。宛先の場所は書き込み可能である必要があります。そうしないと、IOError 例外が発生します。dst が既に存在する場合は、置き換えられます。キャラクターデバイスやブロックデバイス、パイプなどの特殊ファイルは、この機能ではコピーできません。src と dst は文字列として与えられるパス名です。
標準の Python モジュールで使用できるすべてのファイルおよびディレクトリ処理関数については、filesysを参照してください。
ディレクトリとファイルのコピーの例 - Tim Golden の Python スタッフから:
http://timgolden.me.uk/python/win32_how_do_i/copy-a-file.html
import os
import shutil
import tempfile
filename1 = tempfile.mktemp (".txt")
open (filename1, "w").close ()
filename2 = filename1 + ".copy"
print filename1, "=>", filename2
shutil.copy (filename1, filename2)
if os.path.isfile (filename2): print "Success"
dirname1 = tempfile.mktemp (".dir")
os.mkdir (dirname1)
dirname2 = dirname1 + ".copy"
print dirname1, "=>", dirname2
shutil.copytree (dirname1, dirname2)
if os.path.isdir (dirname2): print "Success"
Python 3.5 では、小さなファイル (つまり、テキスト ファイル、小さな jpeg) に対して次のことができます。
from pathlib import Path
source = Path('../path/to/my/file.txt')
destination = Path('../path/where/i/want/to/store/it.txt')
destination.write_bytes(source.read_bytes())
write_bytes
宛先の場所にあったものは何でも上書きします
大きなファイルの場合、私が行ったことは、ファイルを 1 行ずつ読み取り、各行を配列に読み取ることでした。次に、配列が特定のサイズに達したら、それを新しいファイルに追加します。
for line in open("file.txt", "r"):
list.append(line)
if len(list) == 1000000:
output.writelines(list)
del list[:]
open(destination, 'wb').write(open(source, 'rb').read())
ソース ファイルを読み取りモードで開き、書き込みモードで宛先ファイルに書き込みます。
Python には、オペレーティング システムのシェル ユーティリティを使用してファイルを簡単にコピーするための組み込み関数が用意されています。
次のコマンドは、ファイルをコピーするために使用されます
shutil.copy(src,dst)
次のコマンドは、メタデータ情報を含むファイルをコピーするために使用されます
shutil.copystat(src,dst)