Python 拷贝文件

1. 介绍
拷贝文件是计算机编程中常用的操作之一。Python 作为一门强大的编程语言,提供了多种方法来实现文件的拷贝,能够满足不同场景下的需求。
本文将详细介绍在 Python 中如何拷贝文件。首先会介绍 Python 自带的 shutil 模块,它提供了一种简单直接的文件拷贝方式。接着会介绍 os 模块中提供的 open 方法,并通过逐行读取和写入的方式来实现文件的拷贝。最后,会介绍 pathlib 模块,它提供了更加面向对象的操作方式。
2. 使用 shutil 模块拷贝文件
Python 的标准库中提供了一个 shutil 模块,它包含了很多用于文件和文件夹操作的函数。其中就包括了拷贝文件的函数 copy 和 copy2。
2.1. 使用 copy 函数
shutil.copy(src, dst, *, follow_symlinks=True) 函数用于将文件从源路径 src 复制到目标路径 dst。如果 dst 是一个文件夹,则会将 src 拷贝到该文件夹下并保持文件名不变。
以下是使用 copy 函数拷贝文件的示例代码:
import shutil
src = "source.txt"
dst = "destination.txt"
shutil.copy(src, dst)
print("文件拷贝成功")
上述代码中,我们将名为 source.txt 的文件拷贝到名为 destination.txt 的目标文件。
运行结果:
文件拷贝成功
2.2. 使用 copy2 函数
shutil.copy2(src, dst, *, follow_symlinks=True) 函数与 copy 函数类似,但会尽量保留源文件的元数据(如权限、时间戳等)。这在一些特殊场景下可能会有用。
以下是使用 copy2 函数拷贝文件的示例代码:
import shutil
src = "source.txt"
dst = "destination.txt"
shutil.copy2(src, dst)
print("文件拷贝成功")
运行结果:
文件拷贝成功
3. 使用 os 模块逐行读写拷贝文件
除了使用 shutil 模块,还可以使用 Python 的内置模块 os 来逐行读写文件,并实现文件的拷贝。
以下是使用 os 模块拷贝文件的示例代码:
import os
src = "source.txt"
dst = "destination.txt"
with open(src, 'r') as f_src, open(dst, 'w') as f_dst:
for line in f_src:
f_dst.write(line)
print("文件拷贝成功")
上述代码中,我们使用 open 函数打开源文件和目标文件,将源文件的内容逐行读取,并写入目标文件。
运行结果:
文件拷贝成功
4. 使用 pathlib 模块拷贝文件
pathlib 模块是 Python 3.4 引入的一个新模块,提供了一种更加面向对象的文件路径操作方式。
以下是使用 pathlib 模块拷贝文件的示例代码:
from pathlib import Path
src = Path("source.txt")
dst = Path("destination.txt")
with src.open('r') as f_src, dst.open('w') as f_dst:
for line in f_src:
f_dst.write(line)
print("文件拷贝成功")
上述代码中,我们使用 Path 类创建源文件和目标文件的路径对象,并分别使用 open 方法打开文件。
运行结果:
文件拷贝成功
5. 拷贝文件夹
除了拷贝单个文件外,有时还需要拷贝整个文件夹。shutil 模块也提供了相应的函数来实现文件夹的拷贝。
以下是使用 shutil 模块拷贝文件夹的示例代码:
import shutil
src_folder = "source_folder"
dst_folder = "destination_folder"
shutil.copytree(src_folder, dst_folder)
print("文件夹拷贝成功")
上述代码中,我们使用 copytree 函数将 source_folder 文件夹及其子文件夹和文件拷贝到 destination_folder 文件夹中。
运行结果:
文件夹拷贝成功
6. 总结
本文介绍了多种方法在 Python 中实现文件的拷贝。首先,我们使用了 shutil 模块的 copy 和 copy2 函数,并演示了拷贝单个文件和整个文件夹的操作。接着,我们使用了 os 模块和 pathlib 模块,并演示了逐行读写文件的方式。
根据实际需求,我们可以选择适合的方式来拷贝文件。shutil 模块提供了更加简单的操作方式,而 os 模块和 pathlib 模块则提供了更加灵活和面向对象的操作方式。
极客笔记