如何在Python中复制文件?


当前回答

您可以使用系统。

对于类Unix系统:

import os

copy_file = lambda src_file, dest: os.system(f"cp {src_file} {dest}")

copy_file("./file", "../new_dir/file")

其他回答

对于大型文件,我逐行读取文件,并将每一行读取到一个数组中。然后,一旦数组达到一定大小,就将其追加到新文件中。

for line in open("file.txt", "r"):
    list.append(line)
    if len(list) == 1000000: 
        output.writelines(list)
        del list[:]

copy2(src,dst)通常比copyfile(src,gst)更有用,因为:

它允许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

shutil有很多方法可以使用。其中之一是:

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,src和dst是作为strs给出的路径名。

另一个shutil方法是shutil.copy2()。它类似,但保留了更多的元数据(例如时间戳)。

如果使用os.path操作,请使用copy而不是copyfile。copyfile将只接受字符串。

使用subprocess.call复制文件

from subprocess import call
call("cp -p <file> <file>", shell=True)

Use

open(destination, 'wb').write(open(source, 'rb').read())

以读取模式打开源文件,以写入模式写入目标文件。