Python批量压缩和解压文件的操作指南

 更新时间:2025年11月17日 09:17:51   作者:爱分享的飘哥  
你的工作生活中,是不是也经常遇到这些令人抓狂的场景:团队协作分发资料,一个几百MB的文件需要同事挨个下载,不仅效率奇低,还占用大量网络带宽,今天,我将手把手教你如何打造一个Python文件传输神器,如何使用Python批量压缩和解压文件,需要的朋友可以参考下

你的工作生活中,是不是也经常遇到这些令人抓狂的场景?

团队协作分发资料,一个几百MB的文件需要同事挨个下载,不仅效率奇低,还占用大量网络带宽。
上传云盘备份照片,看着进度条龟速前进,仿佛回到拨号上网时代。

面对这些重复且耗时的文件批量压缩和文件解压任务,你是不是也想告别手动压缩,寻找一个更智能、更高效的Python办公自动化解决方案?

今天,我将手把手教你如何打造一个Python文件传输神器,让你:

  • Python文件压缩: 一键打包,让文件秒变小!
  • Python文件解压: 快速还原,让文件传输更流畅!

Python一键让你的文件瞬间瘦身并快速还原,从此告别传输难题!

1. 文件“瘦身”利器:Python批量压缩,一键打包,文件秒变小!

处理大文件传输最直接的方法就是文件压缩。Python能帮你把整个文件夹甚至指定文件,快速打包成一个体积更小的.zip压缩包,让你的文件秒变小,传输更流畅!

功能:

  • 批量压缩文件夹: 将整个项目目录及其所有子文件,一键打包成一个zip文件。
  • 智能选择文件: 你甚至可以控制只压缩特定类型的文件。
  • 解决思路: Python内置的zipfile库,就是你的最佳批量打包文件工具,无需安装第三方库,就能实现高效的Python文件压缩。
import os
import zipfile

def compress_folder_to_zip(source_folder_path, output_zip_path, include_file_types=None):
    """
    批量压缩指定文件夹及其所有内容到一个zip文件。
    这是高效的Python文件压缩方法,实现批量打包文件。
    :param source_folder_path: 要压缩的源文件夹路径
    :param output_zip_path: 输出zip文件的完整路径 (例如 "project_archive.zip")
    :param include_file_types: 可选列表,只压缩指定扩展名的文件 (如 ['.jpg', '.pdf'])
    """
    if not os.path.exists(source_folder_path):
        print(f"❌ 源文件夹不存在:{source_folder_path}")
        return

    # 确保输出目录存在
    os.makedirs(os.path.dirname(output_zip_path), exist_ok=True)

    print(f"🚀 正在压缩文件夹:'{source_folder_path}' 到 '{output_zip_path}'...")
    try:
        with zipfile.ZipFile(output_zip_path, 'w', zipfile.ZIP_DEFLATED) as zf:
            # os.walk() 遍历文件夹及其子文件夹和文件
            for root, dirs, files in os.walk(source_folder_path):
                # 计算当前文件在zip文件中的相对路径
                relative_path = os.path.relpath(root, source_folder_path)
                
                for file in files:
                    file_path = os.path.join(root, file)
                    # 检查文件类型是否在需要包含的列表中
                    if include_file_types and os.path.splitext(file.lower())[1] not in include_file_types:
                        print(f"   ℹ️ 跳过文件(类型不符):{file}")
                        continue

                    # 将文件添加到zip文件,使用相对路径作为zip内部路径
                    zf.write(file_path, os.path.join(relative_path, file))
        
        # 获取压缩前后文件大小,进行直观对比
        original_size_bytes = sum(os.path.getsize(os.path.join(r, f)) for r, d, fs in os.walk(source_folder_path) for f in fs)
        compressed_size_bytes = os.path.getsize(output_zip_path)

        original_size_mb = original_size_bytes / (1024 * 1024) 
        compressed_size_mb = compressed_size_bytes / (1024 * 1024) 
        savings_percentage = ((original_size_bytes - compressed_size_bytes) / original_size_bytes) * 100 if original_size_bytes > 0 else 0

        print(f"✅ 压缩成功!")
        print(f"   原始总大小: {original_size_mb:.2f} MB")
        print(f"   压缩后大小: {compressed_size_mb:.2f} MB")
        print(f"   节省空间: {savings_percentage:.2f}%")

    except Exception as e:
        print(f"❌ 压缩失败:{e}")

if __name__ == "__main__":
    # --- 请修改为你的实际文件夹路径 ---
    source_folder_path = os.path.expanduser("~/Desktop/我的项目资料") 
    output_zip_path = os.path.expanduser("~/Desktop/项目资料_归档.zip")

    # 确保源文件夹存在并有测试文件,可以创建一些子文件夹和文件
    os.makedirs(source_folder_path, exist_ok=True)
    # 示例:创建一些测试文件用于压缩
    with open(os.path.join(source_folder_path, "report.txt"), "w") as f: f.write("Hello World\n" * 5000)
    with open(os.path.join(source_folder_path, "image.jpg"), "w") as f: f.write("binary data" * 100000)
    os.makedirs(os.path.join(source_folder_path, "subfolder"), exist_ok=True)
    with open(os.path.join(source_folder_path, "subfolder", "data.csv"), "w") as f: f.write("1,2,3\n" * 2000)

    # 示例1:压缩整个文件夹
    print("\n--- 示例1:批量压缩整个文件夹 ---")
    compress_folder_to_zip(source_folder_path, output_zip_path)

    # 示例2:只压缩特定类型的文件(如只压缩图片和PDF)
    # print("\n--- 示例2:只压缩图片和PDF ---")
    # compress_folder_to_zip(source_folder_path, os.path.expanduser("~/Desktop/图片文档.zip"), include_file_types=['.jpg', '.png', '.pdf'])

操作步骤:

准备文件夹: 在桌面创建一个名为我的项目资料的文件夹,放入一些不同类型的文件和子文件夹,使其总大小稍大一些(比如几MB甚至几十MB),以体现压缩效果。

修改代码路径: 复制上方代码到VS Code,保存为compress_files.py。修改 source_folder_path 和 output_zip_path 为你实际的文件夹路径和想要保存的zip文件路径。

运行: 在VS Code终端运行 python compress_files.py。

2. 文件“还原”利器:Python批量解压缩,一键还原,轻松查看!

收到了同事发来的.zip压缩包?或者下载了一堆打包文件?Python能帮你一键解压,快速还原所有内容,让你的文件传输流程更加流畅!

主要功能:

  • 批量解压缩: 快速将.zip包解压到指定位置,包括内部的文件夹结构。
  • 处理多种压缩包: zipfile库主要处理.zip格式,但未来还可以扩展支持.rar、.7z等。
  • 如何实现: zipfile库同样提供了简单的API,可以批量解压.zip文件到指定目录。
import os
import zipfile

def extract_zip_to_folder(zip_file_path, target_folder_path):
    """
    解压缩zip文件到指定文件夹。
    这是高效的Python文件解压工具。
    :param zip_file_path: 要解压的zip文件完整路径
    :param target_folder_path: 解压目标文件夹路径
    """
    if not os.path.exists(zip_file_path):
        print(f"❌ Zip文件不存在:{zip_file_path}")
        return

    os.makedirs(target_folder_path, exist_ok=True) # 确保目标文件夹存在

    print(f"🚀 正在解压 '{zip_file_path}' 到 '{target_folder_path}'...")
    try:
        with zipfile.ZipFile(zip_file_path, 'r') as zf:
            zf.extractall(target_folder_path) # 解压所有内容
        print(f"✅ 解压成功!所有文件已解压到:{target_folder_path}")
    except Exception as e:
        print(f"❌ 解压失败:{e}")

if __name__ == "__main__":
    # --- 请修改为你的实际zip文件路径和目标解压路径 ---
    # 假设你已经运行了2.1节的压缩代码,并生成了 '项目资料_归档.zip'
    source_zip_file = os.path.expanduser("~/Desktop/项目资料_归档.zip") 
    output_extracted_folder = os.path.expanduser("~/Desktop/解压后资料")

    os.makedirs(output_extracted_folder, exist_ok=True) # 确保目标文件夹存在

    extract_zip_to_folder(source_zip_file, output_extracted_folder)

操作步骤:

准备zip文件: 使用2.1节的代码生成一个.zip文件,或者手动准备一个包含文件的.zip包。
修改代码路径: 修改 source_zip_file 和 output_extracted_folder 为你实际的路径。

运行: 在VS Code终端运行 python extract_zip.py。

效果展示:

3. 总结与展望:你的文件传输从此“飞”起来!

恭喜你!通过本篇文章,你已经成功掌握了Python文件管理的两大核心魔法——文件批量压缩和文件解压!我们从文件太大难传输的痛点出发,学会了:

  • Python文件压缩: 利用Python实现批量打包文件,让你的大文件传输变得轻松流畅。
  • Python文件解压: 运用Python实现文件解压,快速还原,告别等待。

现在,你不再需要担心大文件发送不出去,也不用忍受漫长的传输和解压过程。你拥有了一个强大的职场效率加速器,能够让你的文件秒变小,传输更流畅!

你平时都是用什么方法压缩文件的?你最希望Python在文件传输方面还能帮你实现哪些功能?比如自动上传到云盘?或者与邮件发送集成?

以上就是Python批量压缩和解压文件的操作指南的详细内容,更多关于Python批量压缩和解压文件的资料请关注脚本之家其它相关文章!

相关文章

  • Python利用Selenium进行网页自动化与动态内容抓取操作

    Python利用Selenium进行网页自动化与动态内容抓取操作

    Selenium是一个自动化测试工具,它允许开发者模拟用户的浏览器行为,执行各种交互操作,下面就跟随小编一起了解下如何使用Python和Selenium进行网页自动化与动态内容抓取吧
    2025-03-03
  • Python闭包的使用方法

    Python闭包的使用方法

    这篇文章主要介绍了Python闭包的使用方法,当返回的内部函数使用了外部函数的变量就形成了闭包,下文更多相关内容需要的小伙伴可以参考一下
    2022-04-04
  • Python GUI之tkinter布局管理教程

    Python GUI之tkinter布局管理教程

    这篇文章主要介绍了Python GUI之tkinter布局管理教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Python获取request response body的方法

    Python获取request response body的方法

    本文介绍了使用Python的requests库发送HTTP GET请求并获取响应体的方法,同时,还简要介绍了如何使用Flask框架在Python中创建一个简单的网站,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Python Pillow 库详解文档(最新推荐)

    Python Pillow 库详解文档(最新推荐)

    Pillow是 Python 中最流行的图像处理库,它是 Python Imaging Library (PIL) 的现代分支和继承者,本文给大家介绍Python Pillow 库详解文档,感兴趣的朋友一起看看吧
    2025-06-06
  • Python脚本实现定时任务的最佳方法

    Python脚本实现定时任务的最佳方法

    我们在日常工作中,常常会用到需要周期性执行的任务,下面这篇文章主要给大家介绍了关于Python脚本实现定时任务的最佳方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • Python入门之三角函数tan()函数实例详解

    Python入门之三角函数tan()函数实例详解

    这篇文章主要介绍了Python入门之三角函数tan()的相关内容,介绍了tan()函数的描述,语法以及简单实例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • django创建最简单HTML页面跳转方法

    django创建最简单HTML页面跳转方法

    今天小编就为大家分享一篇django创建最简单HTML页面跳转方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 一文详解python如何实现流式输出

    一文详解python如何实现流式输出

    这篇文章主要为大家详细介绍了python如何实现流式输出效果,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-09-09
  • Python办公自动化之将任意文件转为PDF格式

    Python办公自动化之将任意文件转为PDF格式

    这种把某个文件转为pdf枯燥无聊的工作,既没有什么技术含量又累. 今天辰哥就教大家将任意文件批量转为PDF,这里以日常办公的word、excel、ppt为例,这三种格式的文件转为PDF.需要的朋友可以参考下
    2021-06-06

最新评论