掘金 人工智能 05月04日 01:14
Python 之 shutil 模块的基本使用(47)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入介绍了 Python 的 shutil 模块,这是一个用于高级文件和目录操作的强大工具。它提供了文件复制、移动、删除,目录的递归操作,文件权限设置以及归档和解压缩等功能。通过丰富的代码示例和详细的注释,帮助开发者高效地管理文件和目录,提升 Python 编程的效率。

📁 shutil.copyfile() 可以复制单个文件,将源文件的内容复制到目标文件。例如,`shutil.copyfile('source.txt', 'destination.txt')` 将复制 source.txt 到 destination.txt。

💾 shutil.copy2() 复制文件并保留元数据,包括文件的创建时间、修改时间等。这在需要保留文件完整信息时非常有用,例如 `shutil.copy2('source.txt', 'destination.txt')`。

📂 shutil.copy() 可以将文件复制到指定目录,如果目标是目录,则会在该目录下创建同名文件。例如,`shutil.copy('source.txt', 'destination_directory')` 将 source.txt 复制到 destination_directory 目录。

🚚 shutil.move() 用于移动文件,将文件从一个位置移动到另一个位置。如果目标是目录,文件会被移动到该目录下;如果目标是文件,原文件会被覆盖。例如,`shutil.move('source.txt', 'destination.txt')`。

📦 shutil.copytree() 递归复制整个目录及其内容,包括子目录和文件。例如,`shutil.copytree('source_directory', 'destination_directory')` 将复制 source_directory 及其所有内容到 destination_directory。

🗑️ shutil.rmtree() 递归删除整个目录及其内容。使用时请务必小心,因为它会永久删除文件。例如,`shutil.rmtree('directory_to_delete')`。

🗄️ shutil.make_archive() 可以创建归档文件,支持多种格式如 zip、tar 等。例如,`shutil.make_archive('archive', 'zip', 'source_directory')` 将 source_directory 归档成 zip 文件。

📤 shutil.unpack_archive() 用于解压缩归档文件。例如,`shutil.unpack_archive('archive.zip', 'extracted_directory')` 将 archive.zip 解压缩到 extracted_directory 目录。

Python 之 shutil 模块的基本使用

一、引言

在 Python 编程中,文件和目录的操作是常见的需求。虽然 Python 的 os 模块已经提供了一些基本的文件和目录操作功能,但对于更高级的操作,如文件的复制、移动、删除以及目录的递归操作等,os 模块的功能就显得有些不足。shutil 模块(即 shell utilities 的缩写)作为 Python 标准库的一部分,提供了一系列高级的文件和目录操作功能,能够帮助开发者更方便、高效地完成文件和目录的管理任务。本文将详细介绍 shutil 模块的基本使用,通过丰富的源码示例和详细的注释,帮助读者全面掌握该模块的功能。

二、shutil 模块概述

2.1 模块作用

shutil 模块主要用于提供一些高级的文件和目录操作功能,它可以看作是 os 模块在文件和目录操作方面的补充和扩展。通过使用 shutil 模块,开发者可以轻松地完成文件的复制、移动、删除,目录的递归复制和删除,以及文件权限的设置等操作,大大提高了文件和目录管理的效率。

2.2 导入模块

在使用 shutil 模块之前,需要先将其导入到 Python 脚本中。可以使用以下代码完成导入:

import shutil  # 导入 shutil 模块,用于后续的文件和目录操作

三、文件复制操作

3.1 复制单个文件

shutil.copyfile() 函数用于复制单个文件,它会将源文件的内容复制到目标文件中。

import shutil# 定义源文件路径src_file = 'source.txt'# 定义目标文件路径dst_file = 'destination.txt'try:    # 复制源文件到目标文件    shutil.copyfile(src_file, dst_file)    print(f"成功将 {src_file} 复制到 {dst_file}")except FileNotFoundError:    print(f"源文件 {src_file} 不存在。")

在上述代码中,shutil.copyfile(src_file, dst_file) 函数尝试将 src_file 复制到 dst_file。如果源文件不存在,会捕获 FileNotFoundError 异常并输出相应的错误信息。

3.2 复制文件并保留元数据

shutil.copy2() 函数与 copyfile() 类似,但它会保留源文件的元数据(如文件的创建时间、修改时间等)。

import shutil# 定义源文件路径src_file = 'source.txt'# 定义目标文件路径dst_file = 'destination.txt'try:    # 复制源文件到目标文件,并保留元数据    shutil.copy2(src_file, dst_file)    print(f"成功将 {src_file} 复制到 {dst_file} 并保留元数据")except FileNotFoundError:    print(f"源文件 {src_file} 不存在。")

在这段代码中,shutil.copy2(src_file, dst_file) 函数将 src_file 复制到 dst_file,并保留源文件的元数据。如果源文件不存在,会捕获 FileNotFoundError 异常并输出相应的错误信息。

3.3 复制文件到目录

shutil.copy() 函数可以将文件复制到指定的目录中。如果目标是一个目录,函数会在该目录下创建一个与源文件同名的文件。

import shutil# 定义源文件路径src_file = 'source.txt'# 定义目标目录路径dst_dir = 'destination_directory'try:    # 复制源文件到目标目录    shutil.copy(src_file, dst_dir)    print(f"成功将 {src_file} 复制到 {dst_dir}")except FileNotFoundError:    print(f"源文件 {src_file} 或目标目录 {dst_dir} 不存在。")

在上述代码中,shutil.copy(src_file, dst_dir) 函数将 src_file 复制到 dst_dir 目录下。如果源文件或目标目录不存在,会捕获 FileNotFoundError 异常并输出相应的错误信息。

四、文件移动操作

4.1 移动文件

shutil.move() 函数用于将文件从一个位置移动到另一个位置。如果目标位置是一个目录,文件会被移动到该目录下;如果目标位置是一个文件,原文件会被覆盖。

import shutil# 定义源文件路径src_file = 'source.txt'# 定义目标文件或目录路径dst = 'destination.txt'try:    # 移动源文件到目标位置    shutil.move(src_file, dst)    print(f"成功将 {src_file} 移动到 {dst}")except FileNotFoundError:    print(f"源文件 {src_file} 不存在。")

在这段代码中,shutil.move(src_file, dst) 函数将 src_file 移动到 dst 位置。如果源文件不存在,会捕获 FileNotFoundError 异常并输出相应的错误信息。

五、目录操作

5.1 递归复制目录

shutil.copytree() 函数用于递归地复制整个目录及其子目录和文件。

import shutil# 定义源目录路径src_dir = 'source_directory'# 定义目标目录路径dst_dir = 'destination_directory'try:    # 递归复制源目录到目标目录    shutil.copytree(src_dir, dst_dir)    print(f"成功将 {src_dir} 递归复制到 {dst_dir}")except FileNotFoundError:    print(f"源目录 {src_dir} 不存在。")except FileExistsError:    print(f"目标目录 {dst_dir} 已经存在。")

在上述代码中,shutil.copytree(src_dir, dst_dir) 函数尝试将 src_dir 递归复制到 dst_dir。如果源目录不存在,会捕获 FileNotFoundError 异常;如果目标目录已经存在,会捕获 FileExistsError 异常,并输出相应的错误信息。

5.2 递归删除目录

shutil.rmtree() 函数用于递归地删除整个目录及其子目录和文件。

import shutil# 定义要删除的目录路径dir_to_delete = 'directory_to_delete'try:    # 递归删除目录    shutil.rmtree(dir_to_delete)    print(f"成功递归删除目录 {dir_to_delete}")except FileNotFoundError:    print(f"要删除的目录 {dir_to_delete} 不存在。")

在这段代码中,shutil.rmtree(dir_to_delete) 函数尝试递归删除 dir_to_delete 目录。如果目录不存在,会捕获 FileNotFoundError 异常并输出相应的错误信息。

六、文件权限操作

6.1 获取文件权限

在某些情况下,我们需要获取文件的权限信息。可以使用 shutil 模块结合 os 模块来实现。

import shutilimport os# 定义文件路径file_path = 'test_file.txt'try:    # 获取文件的权限信息    file_permissions = oct(os.stat(file_path).st_mode & 0o777)    print(f"文件 {file_path} 的权限是: {file_permissions}")except FileNotFoundError:    print(f"文件 {file_path} 不存在。")

在上述代码中,os.stat(file_path).st_mode 获取文件的状态信息,通过与 0o777 进行按位与操作,得到文件的权限信息,并将其转换为八进制字符串。如果文件不存在,会捕获 FileNotFoundError 异常并输出相应的错误信息。

6.2 设置文件权限

shutil 模块本身没有直接设置文件权限的函数,但可以结合 os 模块来实现。

import shutilimport os# 定义文件路径file_path = 'test_file.txt'# 定义新的权限值(八进制)new_permissions = 0o644try:    # 设置文件的权限    os.chmod(file_path, new_permissions)    print(f"成功将文件 {file_path} 的权限设置为 {oct(new_permissions)}")except FileNotFoundError:    print(f"文件 {file_path} 不存在。")

在这段代码中,os.chmod(file_path, new_permissions) 函数将 file_path 文件的权限设置为 new_permissions。如果文件不存在,会捕获 FileNotFoundError 异常并输出相应的错误信息。

七、文件归档操作

7.1 创建归档文件

shutil.make_archive() 函数用于创建归档文件,支持多种归档格式(如 zip、tar 等)。

import shutil# 定义归档文件的基本名称archive_base_name = 'archive'# 定义要归档的目录路径source_dir = 'source_directory'# 定义归档文件的格式archive_format = 'zip'try:    # 创建归档文件    archive_path = shutil.make_archive(archive_base_name, archive_format, source_dir)    print(f"成功创建归档文件: {archive_path}")except FileNotFoundError:    print(f"要归档的目录 {source_dir} 不存在。")

在上述代码中,shutil.make_archive(archive_base_name, archive_format, source_dir) 函数将 source_dir 目录归档为指定格式的文件,归档文件的基本名称为 archive_base_name。如果要归档的目录不存在,会捕获 FileNotFoundError 异常并输出相应的错误信息。

7.2 解压缩归档文件

shutil.unpack_archive() 函数用于解压缩归档文件。

import shutil# 定义归档文件的路径archive_file = 'archive.zip'# 定义解压缩的目标目录extract_dir = 'extracted_directory'try:    # 解压缩归档文件    shutil.unpack_archive(archive_file, extract_dir)    print(f"成功将 {archive_file} 解压缩到 {extract_dir}")except FileNotFoundError:    print(f"归档文件 {archive_file} 不存在。")

在这段代码中,shutil.unpack_archive(archive_file, extract_dir) 函数将 archive_file 解压缩到 extract_dir 目录下。如果归档文件不存在,会捕获 FileNotFoundError 异常并输出相应的错误信息。

八、总结与展望

8.1 总结

Python 的 shutil 模块为我们提供了丰富的文件和目录操作功能,包括文件的复制、移动、删除,目录的递归复制和删除,文件权限的设置,以及文件的归档和解压缩等。这些功能使得 Python 程序能够更方便、高效地完成文件和目录的管理任务,提高了开发效率。通过结合 os 模块,我们可以进一步扩展这些功能,实现更复杂的文件和目录操作。

8.2 展望

随着 Python 在数据处理、自动化运维等领域的广泛应用,对文件和目录操作的需求也会越来越复杂。未来,shutil 模块可能会进一步优化和扩展,提供更多的功能和更好的性能。例如,可能会增加对更多归档格式的支持,提供更灵活的文件和目录操作选项,以及更好地处理跨平台的文件和目录操作问题。对于开发者来说,需要不断关注 shutil 模块的更新和变化,以便在实际项目中更好地利用其功能,提高代码的质量和可维护性。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

shutil 模块 文件操作 目录操作 Python
相关文章