如何复制文件

3799 投票
21 回答
3686900 浏览
提问于 2025-04-11 09:21

我该如何在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 的文件里。srcdst 都需要是文件的完整名称,包括路径。
  • 目标位置必须是可写的;否则会出现 IOError 错误。
  • 如果 dst 已经存在,它会被替换掉。
  • 一些特殊文件,比如字符设备、块设备和管道,不能用这个方法来复制。
  • 使用 copy 时,srcdst 是以 str 形式给出的路径名。

另一个可以关注的 shutil 方法是 shutil.copy2()。这个方法类似,但它会保留更多的元数据(比如时间戳)。

如果你使用 os.path 的操作,建议使用 copy 而不是 copyfile。因为 copyfile 只接受字符串。

撰写回答