python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python批量压缩和解压文件

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

作者:爱分享的飘哥

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

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

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

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

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

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

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

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

功能:

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能帮你一键解压,快速还原所有内容,让你的文件传输流程更加流畅!

主要功能:

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批量压缩和解压文件的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文