如何在 Python 中复制一个文件

Azaz Farooq 2023年1月30日
  1. 在 Python 中 Shutil copyfile() 复制文件的方法
  2. Shutil copy() 方法复制有权限的文件
  3. copy()copyfile() 方法的比较:
  4. copyfileobj() 复制文件对象的方法
  5. copy2() 保存元数据的方法
如何在 Python 中复制一个文件

Python 有几个现成的模块来支持文件 I/O 操作 (如 OS、subprocess 和 shutil)。你将简单地使用 shutil 模块复制文件和目录。复制、转移或删除文件和目录等操作都是使用这个实用功能完成的。这里讨论四种方法如下。

在 Python 中 Shutil copyfile() 复制文件的方法

它将源材料复制到一个目标文件中。如果目标文件不可写,在复制过程中会出现 IOError 异常。如果源文件和目标文件相同,则返回 SameFileError。源文件和目标文件的路径名以字符串形式提供。

copyfile(source_file, destination_file)

本方法不支持字符或块设备和管道。

import shutil

source = r"C:\Users\DelftStack\Documents\test\test.txt"
destination = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copyfile(source, destination)

Shutil copy() 方法复制有权限的文件

copy() 方法的工作原理与 Unix 命令 cp 类似。在复制其内容时,这个方法会同步目标文件和源文件的权限。如果你复制的是同一个文件,它还会抛出 SameFileError。它的语法如下。

shutil.copy(src_file, dest_file, *, follow_symlinks=True)

Shutil copy() 方法复制文件权限的例子

import shutil

src = r"C:\Users\DelftStack\Documents\test\test.txt"
des = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copy(src, des)

copy()copyfile() 方法的比较:

  1. copy() 方法在复制内容时往往设置文件权限,而 copyfile() 只复制数据。
  2. 本质上,在实现中,copyfile() 方法使用了 copyfileobj() 方法。相比之下,copy() 方法使用了 copyfile()copymode() 两个函数。
  3. 通过以上一点可以看出,copyfile() 会比 copy() 快一点,因为后者有一个额外的工作(保留权限)。

copyfileobj() 复制文件对象的方法

该函数将文件复制到目标路径或文件的对象上。如果目标对象是文件对象,则需要直接调用 copyfileobj() 后关闭。缓冲区大小用于指定缓冲区的长度。它是指在复制的过程中,内存中保留的字节数。

copyfileobj() 方法的语法如下。

shutil.copyfileobj(src_file_object, dest_file_object[, length])
import shutil

filename1 = r"C:\Users\DelftStack\Documents\test\test.txt"
fileA = open(filename1, "rb")
filename2 = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
fileB = open(filename2, "wb")
shutil.copyfileobj(fileA, fileB)

copy2() 保存元数据的方法

copy2() 方法与 copy() 方法类似,但除了复制文件内容外,它还保留了源文件的所有元数据。

shutil.copy2(src_file, dest_file, *, follow_symlinks=True)

import shutil

src = r"C:\Users\DelftStack\Documents\test\test.txt"
des = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copy2(src, des)

在 Python 中复制文件的方法结论

最后,附上一个表格,介绍所有的方法,以帮助更好地理解 shutil 工具。

函数 复制元数据 复制权限 可以使用缓冲器 目的地可以是目录
shutil.copy 没有 没有
shutil.copyfile 没有 没有 没有 没有
shutil.copy2 没有 是的,是的
shutil.copyfileobj 没有 没有 没有

相关文章 - Python File