Python 文件压缩与解压技术

Python 文件压缩与解压技术

1. ZIP 文件压缩操作

1.1 基础压缩功能

import zipfile

# 创建压缩文件
with zipfile.ZipFile('test.zip', 'w') as zipf:
    zipf.write('file1.txt')
    zipf.write('file2.txt')

1.2 追加压缩文件

with zipfile.ZipFile('test.zip', 'a') as zipf:
    zipf.write('file3.txt')

1.3 压缩文件过滤

def filter_files(files):
    return [f for f in files if not f.endswith('.tmp')]

1.4 路径拼接处理

import os

def get_full_path(base_dir, filename):
    return os.path.join(base_dir, filename)

2. TAR 文件压缩操作

2.1 基础压缩功能

import tarfile

with tarfile.open('test.tar', 'w') as tar:
    tar.add('file1.txt')
    tar.add('file2.txt')

2.2 自定义文件名

with tarfile.open('test.tar', 'w') as tar:
    tar.add('file1.txt', arcname='new_name.txt')

2.3 压缩文件过滤

def filter_files(files):
    return [f for f in files if not f.startswith('.')]

3. 解压操作指南

3.1 ZIP 文件解压

with zipfile.ZipFile('test.zip', 'r') as zipf:
    zipf.extractall()

3.2 TAR 文件解压

with tarfile.open('test.tar', 'r') as tar:
    tar.extractall()

3.3 解压时的文件名处理

def extract_with_renamer(tar, member):
    new_name = f"renamed_{member.name}"
    tar.extract(member, path='extracted_folder')

4. 高级操作技巧

4.1 压缩目录处理

import os

def compress_directory(zip_path, dir_path):
    with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for root, dirs, files in os.walk(dir_path):
            for file in files:
                file_path = os.path.join(root, file)
                arcname = os.path.relpath(file_path, start=dir_path)
                zipf.write(file_path, arcname=arcname)

4.2 压缩文件大小限制

def compress_with_size_limit(zip_path, file_path, max_size=1024*1024):
    if os.path.getsize(file_path) > max_size:
        raise ValueError("文件大小超过限制")
    with zipfile.ZipFile(zip_path, 'w') as zipf:
        zipf.write(file_path)

5. 常见问题处理

5.1 压缩文件损坏

  • 检查文件路径是否正确
  • 确认写入权限
  • 使用ZIP_DEFLATED压缩方式

5.2 解压失败处理

  • 确认文件完整性
  • 检查文件名编码
  • 使用extractall()方法

5.3 路径冲突处理

def safe_extract(tar, path='extracted'):
    os.makedirs(path, exist_ok=True)
    tar.extractall(path=path)

6. 其他压缩格式

6.1 RAR 格式

# 需要安装 rarfile 库
import rarfile

with rarfile.RarFile('test.rar', 'w') as rarf:
    rarf.add('file1.txt')
    rarf.add('file2.txt')

6.2 7z 格式

# 需要安装 py7zr 库
import py7zr

with py7zr.SevenZipFile('test.7z', 'w') as sevenz:
    sevenz.write('file1.txt')
    sevenz.write('file2.txt')

7. 最佳实践建议

  1. 路径处理:始终使用os.path模块处理文件路径
  2. 异常处理:添加try-except块处理文件操作异常
  3. 编码设置:使用encoding='utf-8'参数处理非ASCII文件名
  4. 压缩级别:根据需求选择压缩级别(ZIP_DEFLATED, ZIP_BZIP2等)
  5. 文件过滤:使用过滤器排除临时文件和隐藏文件

8. 性能优化技巧

8.1 批量处理

def batch_compress(zip_path, files):
    with zipfile.ZipFile(zip_path, 'w') as zipf:
        for file in files:
            zipf.write(file)

8.2 并行处理

from concurrent.futures import ThreadPoolExecutor

def parallel_compress(zip_paths, files_list):
    with ThreadPoolExecutor() as executor:
        futures = [executor.submit(compress_files, zip_path, files) 
                   for zip_path, files in zip_paths]

8.3 内存优化

def compress_large_file(zip_path, file_path):
    with open(file_path, 'rb') as f_in:
        with zipfile.ZipFile(zip_path, 'a', zipfile.ZIP_DEFLATED) as zipf:
            zipf.writestr(os.path.basename(file_path), f_in.read())

9. 常见错误排查

错误类型解决方案
PermissionError检查文件写入权限
FileNotFoundError确认文件路径正确
NotADirectoryError确认压缩对象是文件而非目录
OSError检查磁盘空间和文件系统状态

10. 相关库说明

格式库名称特点
ZIPzipfilePython标准库
TARtarfilePython标准库
RARrarfile需要额外安装
7zpy7zr需要额外安装
GZIPgzipPython标准库

注意:所有压缩操作建议在操作前备份重要数据,特别是在处理大文件或敏感信息时。对于生产环境,建议使用更安全的压缩方式并实施访问控制。

视频学习来源:https://www.bilibili.com/video/BV1YB4y1t7Gm/?p=41

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Terio_my

各位看官,赏脸给个赞~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值