《Python 小程序编写系列》(第四部):文件批量压缩工具

在第三部中,我们介绍了如何创建一个简易文件批量重命名工具,帮助用户高效管理文件。现在,作为本系列的第四部,我将引导您开发一个实用的文件批量压缩工具。这个工具使用Python的标准库,能自动将指定文件夹中的多个文件压缩成一个ZIP包,适用于备份、分享或节省存储空间。整个过程结构清晰,我会分步骤解释核心概念和实现方法,确保代码真实可靠。

工具功能概述

文件压缩工具的核心功能包括:

  • 扫描指定目录下的所有文件。
  • 创建ZIP压缩包,并将文件添加到其中。
  • 支持自定义压缩包名称。
  • 处理异常,如无效路径或权限问题。

实现基于Python的zipfile模块,这是一个内置库,无需额外安装。压缩过程遵循标准算法,压缩率取决于文件类型,例如文本文件压缩率较高,而媒体文件压缩率较低。

分步实现指南

让我们逐步构建这个工具。我将先解释关键步骤,然后提供完整代码。确保您已安装Python环境(推荐Python 3.6+)。

步骤1: 导入必要模块 首先,导入Python的zipfile模块用于压缩,os模块用于文件路径处理。

import zipfile
import os

步骤2: 定义压缩函数 核心是一个函数compress_files(folder_path, output_zip),它接收文件夹路径和目标ZIP文件名作为参数。

  • folder_path:要压缩的文件夹路径。
  • output_zip:生成的ZIP文件名。 函数内部逻辑:
  • 检查路径有效性。
  • 遍历文件夹中所有文件。
  • 使用zipfile.ZipFile创建ZIP包并添加文件。
def compress_files(folder_path, output_zip):
    # 检查文件夹是否存在
    if not os.path.isdir(folder_path):
        print(f"错误:路径 '{folder_path}' 不存在或不是文件夹。")
        return
    
    # 创建ZIP文件
    with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED) as zipf:
        # 遍历文件夹中的所有文件
        for root, _, files in os.walk(folder_path):
            for file in files:
                file_path = os.path.join(root, file)
                # 添加文件到ZIP包
                zipf.write(file_path, os.path.relpath(file_path, folder_path))
    print(f"压缩完成!文件已保存为 '{output_zip}'。")

步骤3: 添加用户交互 为了让工具更易用,我们可以添加简单的命令行交互,提示用户输入文件夹路径和输出文件名。

def main():
    # 获取用户输入
    folder_path = input("请输入要压缩的文件夹路径:")
    output_zip = input("请输入输出ZIP文件名(例如:archive.zip):")
    
    # 调用压缩函数
    compress_files(folder_path, output_zip)

if __name__ == "__main__":
    main()

步骤4: 完整代码示例 将上述代码整合成一个完整的Python脚本。保存为file_compressor.py,运行即可使用。

import zipfile
import os

def compress_files(folder_path, output_zip):
    if not os.path.isdir(folder_path):
        print(f"错误:路径 '{folder_path}' 不存在或不是文件夹。")
        return
    
    try:
        with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED) as zipf:
            for root, _, files in os.walk(folder_path):
                for file in files:
                    file_path = os.path.join(root, file)
                    zipf.write(file_path, os.path.relpath(file_path, folder_path))
        print(f"压缩完成!文件已保存为 '{output_zip}'。")
    except Exception as e:
        print(f"压缩失败:{e}")

def main():
    folder_path = input("请输入要压缩的文件夹路径:")
    output_zip = input("请输入输出ZIP文件名(例如:archive.zip):")
    compress_files(folder_path, output_zip)

if __name__ == "__main__":
    main()

代码解释与优化建议
  • 关键点解释
    • 使用with语句确保ZIP文件正确关闭。
    • zipfile.ZIP_DEFLATED指定压缩算法,提高效率。
    • os.walk递归遍历子文件夹,处理所有文件。
    • 异常处理try-except捕获常见错误,如权限不足。
  • 优化建议
    • 添加进度显示:可以集成tqdm库显示压缩进度。
    • 支持过滤文件类型:例如只压缩.txt文件。
    • 增加日志记录:将操作记录到文件。
测试与使用
  1. 创建一个测试文件夹,放入一些文件。
  2. 运行脚本:python file_compressor.py
  3. 输入路径和输出文件名。
  4. 检查生成的ZIP文件。

本工具简单高效,适合日常文件管理。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐