Python中的 shutil
模块提供了很多文件和目录操作的功能,特别是用于文件的高级操作,比如复制、移动、删除文件和目录,压缩和解压缩文件等。它是 Python 标准库的一部分,常用于文件管理和处理。
1. 常用功能和方法
1.1 文件操作
-
shutil.copy(src, dst)
复制文件src
到dst
,如果目标是一个目录,则将文件复制到该目录中。import shutil # 复制文件 shutil.copy('source.txt', 'destination.txt')
-
shutil.copy2(src, dst)
类似于copy()
,但它还会尽可能保留原文件的元数据(例如修改时间等)。import shutil # 复制文件,并保留元数据 shutil.copy2('source.txt', 'destination.txt')
-
shutil.copyfile(src, dst)
复制文件内容,不会保留原文件的元数据。import shutil # 复制文件内容 shutil.copyfile('source.txt', 'destination.txt')
-
shutil.move(src, dst)
移动文件或目录,如果目标位置已存在相同的文件,它会覆盖目标文件。import shutil # 移动文件 shutil.move('source.txt', 'new_directory/')
-
shutil.remove(filename)
删除指定的文件。import shutil # 删除文件 shutil.remove('file_to_delete.txt')
1.2 目录操作
-
shutil.rmtree(path)
删除目录及其所有内容(递归删除),注意使用时要小心,因为它会删除目录及其中的所有文件和子目录。import shutil # 删除目录及其内容 shutil.rmtree('directory_to_remove')
-
shutil.mkdir(path)
创建目录。如果目录已存在,会引发FileExistsError
。import shutil # 创建目录 shutil.mkdir('new_directory')
-
shutil.makedirs(path)
递归创建目录。即使中间的父目录不存在,它也会创建所有的父目录。import shutil # 创建多级目录 shutil.makedirs('parent/child/grandchild')
-
shutil.chown(path, user, group)
更改文件或目录的所有者和所属组。import shutil # 更改文件所有者和组 shutil.chown('file.txt', user='newuser', group='newgroup')
1.3 文件系统的归档
-
shutil.make_archive(base_name, format, root_dir=None, base_dir=None)
创建一个归档文件,格式支持'zip'
,'tar'
,'gztar'
,'bztar'
,'xztar'
等。base_name
是归档文件的基本名称,format
是归档格式,root_dir
是文件或目录的根目录,base_dir
是被归档的文件或目录。import shutil # 创建一个zip格式的归档文件 shutil.make_archive('archive_name', 'zip', 'folder_to_compress')
-
shutil.unpack_archive(filename, extract_dir=None, format=None)
解压归档文件到指定目录,自动识别文件格式或指定格式。import shutil # 解压归档文件 shutil.unpack_archive('archive_name.zip', 'destination_folder')
1.4 磁盘空间和文件系统信息
-
shutil.disk_usage(path)
获取指定路径所在磁盘的使用情况,返回一个包含总空间、已用空间和可用空间的元组。import shutil # 获取磁盘空间 total, used, free = shutil.disk_usage('/') print(f"Total: {total}, Used: {used}, Free: {free}")
1.5 文件比较
-
shutil.cmp(file1, file2, shallow=True)
比较两个文件是否相同,shallow=True
表示只比较文件的大小和修改时间,shallow=False
则会比较文件的内容。import shutil # 比较文件 are_files_equal = shutil.cmp('file1.txt', 'file2.txt') print("Files are equal:", are_files_equal)
2. 常见示例
2.1 复制整个目录
可以使用 shutil.copytree()
来复制整个目录及其所有内容。
import shutil
# 复制整个目录
shutil.copytree('source_directory', 'destination_directory')
2.2 创建归档文件并解压
创建一个 .zip
格式的归档文件,然后解压它。
import shutil
# 创建一个归档文件
shutil.make_archive('my_archive', 'zip', 'folder_to_compress')
# 解压归档文件
shutil.unpack_archive('my_archive.zip', 'extracted_folder')
2.3 删除文件夹及其内容
删除整个目录及其所有文件和子目录。
import shutil
# 删除目录及其所有内容
shutil.rmtree('folder_to_delete')
3. 总结
shutil
模块提供了丰富的工具,能够方便地进行文件和目录的管理操作,尤其适合进行批量文件处理、目录操作、文件归档等任务。它对处理文件系统的任务非常高效,常用于自动化脚本中。常见操作包括复制、移动、删除文件或目录,压缩和解压文件,获取磁盘空间信息等。
常见的功能包括:
- 复制文件或目录:
copy()
,copy2()
,copytree()
。 - 移动文件或目录:
move()
。 - 删除文件或目录:
remove()
,rmtree()
。 - 归档和解压文件:
make_archive()
,unpack_archive()
。 - 磁盘空间信息:
disk_usage()
。
如果你对 shutil
模块的某个方法或用法有疑问,或者需要更多示例,随时告诉我!