为什么需要文件压缩?
文件压缩是软件开发中常见的需求,它可以帮助我们:
- 节省存储空间
- 减少文件传输时间
- 将多个文件打包为一个文件
- 保护文件内容
Python内置的zipfile
模块提供了强大的ZIP文件处理功能,无需额外安装任何库。
基本压缩操作
压缩单个文件
import zipfile
# 创建新的ZIP文件
with zipfile.ZipFile('compressed.zip', 'w') as zipf:
# 添加文件到压缩包
zipf.write('document.txt', arcname='doc.txt')
print("文件压缩完成!")
压缩整个目录
import os
import zipfile
def zip_directory(folder_path, output_path):
with zipfile.ZipFile(output_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)
# 压缩my_folder目录到archive.zip
zip_directory('my_folder', 'archive.zip')
解压文件操作
解压整个ZIP文件
import zipfile
with zipfile.ZipFile('archive.zip', 'r') as zipf:
# 解压所有文件到指定目录
zipf.extractall('extracted_files')
print("文件解压完成!")
解压特定文件
import zipfile
with zipfile.ZipFile('archive.zip', 'r') as zipf:
# 获取ZIP文件中的文件列表
file_list = zipf.namelist()
print("压缩包中的文件:", file_list)
# 解压特定文件
if 'important_document.txt' in file_list:
zipf.extract('important_document.txt', 'important_files')
高级技巧
添加压缩密码
import zipfile
import zlib
with zipfile.ZipFile('secure.zip', 'w') as zipf:
zipf.write('secret.txt', arcname='secret.txt')
# 设置密码
zipf.setpassword(b'my_password')
压缩级别设置
import zipfile
# 使用不同的压缩级别
with zipfile.ZipFile('compressed_fast.zip', 'w', compression=zipfile.ZIP_STORED) as zipf:
zipf.write('file.txt') # 不压缩
with zipfile.ZipFile('compressed_normal.zip', 'w', compression=zipfile.ZIP_DEFLATED) as zipf:
zipf.write('file.txt') # 标准压缩
with zipfile.ZipFile('compressed_max.zip', 'w', compression=zipfile.ZIP_BZIP2) as zipf:
zipf.write('file.txt') # 最大压缩
最佳实践
- 使用
with
语句确保文件正确关闭 - 压缩大文件时使用
ZIP_DEFLATED
压缩方式 - 解压文件前检查目标目录是否存在
- 处理压缩文件时使用异常处理
- 为压缩文件添加有意义的名称和日期后缀
发表评论