当我们需要在 Python 中执行文件和目录的复制、删除、移动等文件系统操作时,通常会使用 os
模块,但它并没有提供一些更高级别的功能,例如递归地复制多层目录、指定文件属性等。这时,就需要借助 shutil
模块了。
shutil
模块的介绍
shutil
是 Python 标准库下的模块,用于高级的文件操作,封装了 os
模块中一些常用的文件和目录操作函数,如 copy()
, move()
, rmtree()
等。同时,shutil
模块还提供了跨平台支持,可在不同的操作系统上执行相同的文件操作功能。
shutil
模块的常用函数
shutil.copy(src, dst)
复制 src(一个文件)到 dst。
import shutil
src_file = "/path/to/source/file.txt"
dst_file = "/path/to/destination/file.txt"
shutil.copy(src_file, dst_file)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归地复制整个目录树(src 和它的所有子目录)到 dst。dst 目录不能已存在。
import shutil
src_folder = "/path/to/source/folder"
dst_folder = "/path/to/destination/folder"
shutil.copytree(src_folder, dst_folder)
shutil.rmtree(path, ignore_errors=False, onerror=None)
删除整个目录树,包括所有子目录和文件。
import shutil
folder_to_delete = "/path/to/folder/to/delete"
shutil.rmtree(folder_to_delete)
shutil.move(src, dst)
将文件或目录从 src 移动到 dst,如果 dst 已经存在,会把 src 覆盖。
import shutil
src_path = "/path/to/source/file_or_folder"
dst_path = "/path/to/destination/"
shutil.move(src_path, dst_path)
示例
例 1:将一个文件夹中的所有文件同步到另一个文件夹
假设我们有一个名为 source_folder
的文件夹,里面有多个文件和子文件夹,我们想将其中的所有文件同步到名为 destination_folder
的目标文件夹中。这可以使用以下代码实现:
import os
import shutil
source_folder = "/path/to/source/folder"
destination_folder = "/path/to/destination/folder"
# 遍历 source_folder 中的所有文件和目录
for root, dirs, files in os.walk(source_folder):
# 在 destination_folder 中创建相同的子目录
for sub_dir in dirs:
os.makedirs(os.path.join(destination_folder, root.replace(source_folder, ""), sub_dir), exist_ok=True)
# 将 source_folder 中的所有文件复制到 destination_folder
for file in files:
shutil.copy(os.path.join(root, file), destination_folder + root.replace(source_folder, ""))
例 2:在 Python 中将一个目录和文件压缩成 zip 文件
假设我们有一个名为 folder_to_compress
的文件夹,我们想将其中的所有文件和文件夹压缩成一个 zip 文件并保存到名为 compressed.zip
的文件中。这可以使用以下代码实现:
import shutil
folder_to_compress = "/path/to/folder/to/compress"
compressed_file = "/path/to/compressed.zip"
shutil.make_archive(compressed_file[:-4], 'zip', folder_to_compress)
本例中,make_archive()
函数会将 folder_to_compress
文件夹及其下的所有文件和目录压缩为名为 compressed.zip
的 zip 文件。由于 make_archive()
函数本身不支持指定压缩文件名,因此我们使用 compressed_file[:-4]
来去掉文件名中的 .zip
扩展名,然后将 .zip
扩展名作为第二个参数传递给 make_archive()
函数来指定压缩格式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 中 Shutil 模块详情 - Python技术站