Python 中复制文件的 8 种方法

Python 提供了多种复制文件的方法,每种方法都有其独特的功能和用例。让我们深入研究这些方法,阐明它们的独特特征和实际应用。

1.shutil.copyfile()方法
这个功能简单、高效。它有两个参数:源文件名和目标文件名。它读取源文件并将其内容写入目标文件,如果目标文件不存在则创建它,如果存在则覆盖它。这是一个例子:

import shutil
shutil.copyfile('source.txt', 'destination.txt')

此方法非常适合只需复制内容的简单文件复制任务。

2.shutil.copy()方法
以下是如何使用的示例shutil.copy():

import shutil
shutil.copy('source.txt', 'destination.txt')

乍一看,它可能与该shutil.copyfile()方法相似。但是,有一个关键的区别:虽然copyfile()仅复制文件的内容,但copy()还将源文件的权限位复制到目标文件。

当您需要在复制的文件中维护相同的文件权限时,此方法特别有用。

3.shutil.copyfileobj()方法
以下是如何使用的示例shutil.copyfileobj():

import shutil
with open('source.txt', 'r') as src, open('destination.txt', 'w') as dst:
    shutil.copyfileobj(src, dst)

shutil.copyfileobj()方法是复制文件的另一个有用的功能。它以两个文件对象作为参数,并将第一个文件对象的内容复制到第二个文件对象。
当您想要复制已打开的文件时,这特别有用。

4.shutil.copy2()方法
以下是如何使用的示例shutil.copy2():

import shutil
shutil.copy2('source.txt', 'destination.txt')

对于那些需要复制的不仅仅是文件内容和权限位的人来说,还有shutil.copy2().
此函数的工作方式与 类似copy(),但还有一个额外的好处:它还复制源文件的元数据,包括其时间戳。
当您需要保留文件的上次访问和修改时间时,这会很有用。

5.os.popen()方法
此函数打开与命令行之间的管道。您可以使用它来执行复制文件的 shell 命令,如下所示:

import os
os.popen('cp source.txt destination.txt')

这将使用 shell 命令 cp 将文件 source.txt 复制到 destination.txt。

import os
os.popen('cp source.txt destination.txt')

此方法直接从 Python 脚本为您提供命令行的强大功能和灵活性。但值得注意的是,

该方法不可跨平台移植,因此请谨慎使用。

6.os.system() 方法
os.system() 方法是一个多功能函数,可用于文件复制。该方法允许你在子壳中执行命令,使你能像在终端中一样运行 cp 命令。下面是一个例子:

import os
os.system('cp source.txt destination.txt')

虽然 os.system() 功能强大,但也有其局限性。最主要的是它缺乏可移植性,因为它依赖于 shell 命令,而不同操作系统的 shell 命令可能会有所不同。

7.使用线程库异步复制文件
另一种高级技术是使用线程库异步复制文件。这在需要同时复制多个文件时特别有用。

通过在不同的线程中复制文件,可以加快复制过程,提高应用程序的响应速度。

多线程可能会导致潜在的问题,比如竞赛条件,即两个线程同时尝试访问或修改相同的数据。要避免这些问题,谨慎管理线程至关重要。

8.子进程模块
下面举例说明如何使用 subprocess.call():

import subprocess
subprocess.call(['cp', 'source.txt', 'destination.txt'])

子进程模块为文件复制提供了另一种高级方法。
call() 和 check_output() 方法允许你执行外部命令并捕获它们的输出。
当您需要使用命令行工具或其他外部程序复制文件时,这将非常方便。