【Python】shutil模块:文件和目录操作

Python中的 shutil 模块提供了很多文件和目录操作的功能,特别是用于文件的高级操作,比如复制、移动、删除文件和目录,压缩和解压缩文件等。它是 Python 标准库的一部分,常用于文件管理和处理。

1. 常用功能和方法

1.1 文件操作
  • shutil.copy(src, dst)
    复制文件 srcdst,如果目标是一个目录,则将文件复制到该目录中。

    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 模块的某个方法或用法有疑问,或者需要更多示例,随时告诉我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值