3231

Pythonでファイルをコピーするにはどうすればよいですか?

os モジュールの下に何も見つかりませんでした。

4

21 に答える 21

3991

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。と は両方ともsrcdstパスを含むファイルの完全なファイル名である必要があります。
  • 宛先の場所は書き込み可能である必要があります。そうしないと、IOError例外が発生します。
  • すでに存在する場合dstは、置き換えられます。
  • キャラクターデバイスやブロックデバイス、パイプなどの特殊ファイルは、この機能ではコピーできません。
  • 、およびはcopy、 sとして指定されたパス名です。srcdststr

もう 1 つのshutil方法は、 ですshutil.copy2()。似ていますが、より多くのメタデータ (タイム スタンプなど) を保持します。

os.path操作を使用する場合は、copyではなく使用してくださいcopyfilecopyfile文字列のみを受け入れます。

于 2008-09-23T19:25:35.393 に答える
1824
関数
メタデータをコピーします

アクセス許可をコピーする
ファイルオブジェクトを使用 宛先
はディレクトリの可能性があります
shutil.copy いいえ はい いいえ はい
shutil.copyfile いいえ いいえ いいえ いいえ
shutil.copy2 はい はい いいえ はい
shutil.copyfileobj いいえ いいえ はい いいえ
于 2015-05-20T20:01:48.237 に答える
878

copy2(src,dst)copyfile(src,dst)多くの場合、次の理由よりも便利です。

  • (完全なターゲット ファイル名の代わりに)ディレクトリdstにすることができます。その場合、新しいファイルの作成に のベース名が使用されますsrc
  • 元の変更とアクセス情報 (mtime と atime) をファイル メタデータに保持します (ただし、これにはわずかなオーバーヘッドが伴います)。

以下に短い例を示します。

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
于 2008-09-23T19:29:41.810 に答える
171

shutilパッケージのコピー機能のいずれかを使用できます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
機能 保持 サポート コピーを受け入れる その他
                      パーミッション ディレクトリ dest. ファイル obj メタデータ  
―――――――――――――――――――――――――――――――――――――――――――――――――― ――――――――――――――――――――――――――――
shutil.copy               ✔ ✔ ☐ ☐
 shutil.copy2              ✔ ✔ ☐ ✔
 shutil.copyfile           ☐ ☐ ☐ ☐
 shutil.copyfileobj        ☐ ☐ ✔ ☐
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

例:

import shutil
shutil.copy('/etc/hostname', '/var/tmp/testhostname')
于 2017-07-09T11:50:12.380 に答える
108

以下の例に示すように、ファイルのコピーは比較的簡単な操作ですが、代わりに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)
于 2008-09-24T07:21:12.083 に答える
81

shutil モジュールを使用します。

copyfile(src, dst)

src という名前のファイルの内容を dst という名前のファイルにコピーします。宛先の場所は書き込み可能である必要があります。そうしないと、IOError 例外が発生します。dst が既に存在する場合は、置き換えられます。キャラクターデバイスやブロックデバイス、パイプなどの特殊ファイルは、この機能ではコピーできません。src と dst は文字列として与えられるパス名です。

標準の Python モジュールで使用できるすべてのファイルおよびディレクトリ処理関数については、filesysを参照してください。

于 2008-09-23T19:27:23.157 に答える
50

ディレクトリとファイルのコピーの例 - 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"
于 2011-03-15T10:11:21.953 に答える
18

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宛先の場所にあったものは何でも上書きします

于 2019-04-25T14:09:14.553 に答える
14

大きなファイルの場合、私が行ったことは、ファイルを 1 行ずつ読み取り、各行を配列に読み取ることでした。次に、配列が特定のサイズに達したら、それを新しいファイルに追加します。

for line in open("file.txt", "r"):
    list.append(line)
    if len(list) == 1000000: 
        output.writelines(list)
        del list[:]
于 2015-05-25T05:11:47.297 に答える
13
open(destination, 'wb').write(open(source, 'rb').read())

ソース ファイルを読み取りモードで開き、書き込みモードで宛先ファイルに書き込みます。

于 2019-03-23T00:46:19.783 に答える
-2

Python には、オペレーティング システムのシェル ユーティリティを使用してファイルを簡単にコピーするための組み込み関数が用意されています。

次のコマンドは、ファイルをコピーするために使用されます

shutil.copy(src,dst)

次のコマンドは、メタデータ情報を含むファイルをコピーするために使用されます

shutil.copystat(src,dst)
于 2019-06-10T10:05:55.417 に答える