如何在 Python 中复制一个文件

Azaz Farooq 2023年1月30日 Python Python File
  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 没有 没有 没有
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe

相关文章 - Python File