如何在Python中复制文件?

如何在Python中复制文件? 我在os下找不到任何东西。

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

 from shutil import copyfile copyfile(src, dst) 

将名为src的文件的内容复制到名为dst的文件中。 目标位置必须是可写的; 否则会IOErrorexception。 如果dst已经存在,它将被replace。 特殊文件(如字符或块设备和pipe道)不能使用此function进行复制。 srcdst是以stringforms给出的path名。

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

  • 它允许dst是一个目录 (而不是完整的目标文件名),在这种情况下, src的基名被用于创build新文件;
  • 它保留了文件元数据中的原始修改和访问信息(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 
 ------------------------------------------------------------------------- | Function |Copies Metadata|Copies Permissions|Can Specify Buffer| ------------------------------------------------------------------------- | shutil.copy | No | Yes | No | ------------------------------------------------------------------------- | shutil.copyfile | No | No | No | ------------------------------------------------------------------------- | shutil.copy2 | Yes | Yes | No | ------------------------------------------------------------------------- | shutil.copyfileobj| No | No | Yes | ------------------------------------------------------------------------- 

复制一个文件是一个相对直接的操作,如下面的例子所示,但是你应该使用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, ie any object with a read or write method, like for example StringIO. """ while 1: 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的文件中。 目标位置必须是可写的; 否则会引发IOErrorexception。 如果dst已经存在,它将被replace。 特殊文件(如字符或块设备和pipe道)不能使用此function进行复制。 src和dst是以stringforms给出的path名。

看一下filesys中所有可用于标准Python模块的文件和目录处理函数。

目录和文件复制的例子 – 从蒂姆金的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" 

看看模块shutil 。 它包含函数copyfilesrcdst

您可以使用shutil包中的一个复制function:

 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
function保留支持接受其他副本
                      权限目录dest。 文件obj元数据  
 -------------------------------------------------- ----------------------------
 shutil.copy✔✔☐☐
 shutil.copy2✔✔☐✔
 shutil.copyfile☐☐☐☐
 shutil.copyfileobj☐☐✔☐
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

例:

 import shutil shutil.copy('/etc/hostname', '/var/tmp/testhostname') 

你可以使用os.system('cp nameoffilegeneratedbyprogram /otherdirectory/')

或者像我一样,

 os.system('cp '+ rawfile + ' rawdata.dat') 

其中rawfile是我在程序中生成的名称。

这是一个仅限Linux的解决scheme

对于大文件,我所做的是逐行读取文件,并将每行读入一个数组。 然后,一旦数组达到一定的大小,将其附加到一个新的文件。

 for line in open("file.txt", "r"): list.append(line) if len(list) == 1000000: output.writelines(list) del list[:] 
 from subprocess import call call("cp -p <file> <file>", shell=True) 

我build议使用Swati的答案,但是假设你有一个文本文件,并且不想在你的代码中使用额外的库来复制它,你可以使用下面的代码:

 with open(source, 'r') as src, open(dest, 'w') as dst: dst.write(src.read())