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
模块则提供了更加灵活和面向对象的操作方式。