如何复制文件
我该如何在Python中复制一个文件呢?
21 个回答
980
copy2(src,dst)
这个函数通常比 copyfile(src,dst)
更有用,原因有两个:
- 它允许
dst
是一个 目录(而不是完整的目标文件名),这样的话,basename(文件名的基本部分)会从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
2125
函数 | 复制 元数据 |
复制 权限 |
使用文件对象 | 目标 可以是目录 |
---|---|---|---|---|
shutil.copy | 不复制 | 复制 | 不使用 | 可以是 |
shutil.copyfile | 不复制 | 不复制 | 不使用 | 不可以 |
shutil.copy2 | 复制 | 复制 | 不使用 | 可以是 |
shutil.copyfileobj | 不复制 | 不复制 | 使用 | 不可以 |
4673
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
是以str
形式给出的路径名。
另一个可以关注的 shutil
方法是 shutil.copy2()
。这个方法类似,但它会保留更多的元数据(比如时间戳)。
如果你使用 os.path
的操作,建议使用 copy
而不是 copyfile
。因为 copyfile
只接受字符串。