《Python 小程序编写系列》(第四部):文件批量压缩工具
·
《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文件。 - 增加日志记录:将操作记录到文件。
- 添加进度显示:可以集成
测试与使用
- 创建一个测试文件夹,放入一些文件。
- 运行脚本:
python file_compressor.py。 - 输入路径和输出文件名。
- 检查生成的ZIP文件。
本工具简单高效,适合日常文件管理。
更多推荐

所有评论(0)