开发者

python解压缩文件或文件夹两种常见方式(附代码)

目录
  • 前言
  • 压缩文件或文件夹
    • 1. 使用 zipfile 模块压缩文件夹
    • 2. 使用 shutil 模块压缩文件夹
  • 解压缩文件
    • 1. 使用 zipfile 解压 .zip 文件
    • 2. 使用 android;shutil 解压文件
  • 完整示例:压缩与解压缩结合
    • 总结

      前言

      在日常开发或数据处理工作中,我们经常需要对文件或文件夹进行压缩和解压缩操作。python 提供了强大的内置模块,如 zipfile 和 shutil,可以帮助我们高效地完成这些任务。

      本文将介绍如何使用 Python 对文件夹或文件进行压缩和解压缩,内容包括两种常见方式:zipfile 和 shutil,并提供完整代码示例。

      压缩文件或文件夹

      1. 使用 zipfile 模块压缩文件夹

      zipfile 模块是 Python 标准库的一部分,用于创建和读取 .zip 文件。它支持精细控制文件压缩的内容和路径。

      以下是一个将文件夹压缩为 .zip 文件的代码示例:

      import os
      import zipfile
      
      def compress_folder_to_zip(folder_path, zip_path):
          with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
              for root, dirs, files in os.walk(folder_path):
                  for file in files:
                      file_path = os.path.join(root, file)
                      # 添加到 ZIP 文件时,保留相对路径
                      arcname = os.path.relpath(file_path, folder_path)
                      zipf.write(file_path, arcname)
          print(f"压缩完成:{zip_path}")
      
      # 示例用法
      compress_folder_to_androidzip('path/to/folder', 'output.zip')
      

      代码说明:

      • os.walk 遍历文件夹及其子文件夹中的所有文件。
      • os.path.relpath 确保压缩后的文件路径相对于原始文件夹路径。
      • zipfile.ZIP_DEFLATED 指定压缩算法。

      2. 使用 shutil 模块压缩文件夹

      如果你只需要简单快速地将文件夹压缩为 .zip 或 .tar 文件,可以使用 shutil 模块。它支持多种压缩格式,包括 ziptargztar 等。

      代码示例如下:

      import shutil
      
      def compress_with_shutil(folder_path, output_path, format='zip'):
          # format 支持 "zip", "tar", "gztar", "bztar", "xztar"
          shutil.make_archive(output_path, format, folder_path)
          print(f"压缩完成:{output_path}.{format}")
      
      # 示例用法
      compress_with_shutil('path/to/folder', 'output', 'zip')
      

      代码说明:

      • shutil.make_archive 方法自动完成压缩过程,output_path 不需要包含扩展名。
      • format 参数支持多种格式,选择适合的压缩格式即可。

      解压缩文件

      1. 使用 zipfile 解压 .zip 文件

      使用 zipfile 模块,我们可以解压 .zip 文件到指定目录:

      import zipfile
      
      def extract_zip(zip_path,编程客栈 extract_to):
          with zipfile.ZipFile(zip_path, 'r') as zipf:
              zipf.extractall(extract_to)
          print(f"解压完成:{extract_to}")
      
      # 示例用法
      extract_zip('output.zip', 'path/to/extract')
      

      代码说明:

      • zipf.extractall() 会解压缩 ZIP 文件中的所有内容到指定路径。
      • 适用于需要自定义解压逻辑的场景。

      2. 使用 shutil 解压文件

      如果文件是 .zip 格式,并且不需要复杂操作,可以使用 shutil 快速解压:

      import shutil
      
      def extract_with_shutil(zip_path, extract_to):
          shutil.unpack_archive(zip_path, extract_to)
          print(f"解压完成:{extract_to}")
      
      # 示例用法
      extract_with_shutil('output.zip', 'path/to/extract')
      

      代码说明:

      • shutil.unpack_archive 支持解压多种格式文件,如 .zip 和 .tar
      • 适用于快速解压任务。

      完整示例:压缩与解压缩结合

      以下是一个包含压缩和解压缩功能的完整 Python 脚本:

      import os
      import zipfile
      import shutil
      
      def compress_folder(folder_path, zip_path):
          with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
              for root, dirs, files in os.walk(folder_path):
                  for file in files:
                      file_path = os.path.join(root, file)
                      arcname = os.path.relpath(file_path, folder_path)
                      zipf.write(file_path, arcname)
          print(f"压缩完成:{zip_path}")
      
      def decompress_folder(zip_path, extract_to):
          with zipfile.ZipFile(zip_path, 'r') as zipf:
              zipf.extractall(extract_to)
          print(f"解压完成:{extract_to}")
      
      # 示例用法
      if __name__ == "__main__":
          # 压缩文件夹
          compress_folder('path/to/folder', 'output.zip')
          # 解压 ZIP 文件
          decompress_folder('output.zip', 'path/to/extract')
      

      总结

      在这篇文章中,我们学习了如何使用 Python 的 zipfile 和 shutil 模块进行文件夹和文件的压缩与解压缩操作:

      • zipfile 模块:适合需要精细控制的场景,如自定义压缩路径。
      • shutil 模块:快速完成压缩和解压缩,适合简单任务。

      编程客栈论你是需要对多个文件进行压缩管理,还是希望快速解压一个文件夹,这两种方式都能满足你的需求。

      到此这篇关于python解压缩文件或文件夹两种常见方式的文章就介绍到这了,更多相关python解压缩文件或文件夹内容请搜索编程客栈(www.devze.com)php以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜