python2.7读取.7z压缩的文件

撰写时间:2017.8.4

系统环境

系统:ubuntu14.04
开发环境:python2.7
实现功能:读取.7z压缩文件夹中的所有文件
使用第三方包:pylzma和py7zlib

注:pylzma包含py7zlib包,所以只需要安装pylzma即可

安装第三方包pylzma

pip install pylzma

安装和测试过程如下:

这里写图片描述

使用py7zlib包读取文件

首先贴一下该包的github地址:https://github.com/fancycode/pylzma/blob/master/py7zlib.py
由于博主并没有找到该包的任何官方文档,所以所有的api都得一边google,一边看源码,很痛苦

读取文件

fp = open(
Python 2.7 中,若不使用 `py7zr` 库解压 7z 文件,可以使用 `py7zlib` 库。不过 `py7zlib` 库需要手动安装。 以下是实现所有文件解压完成前后添加打印信息的代码示例: ```python import os import shutil import py7zlib # 定义LBA大小为4096字节 LBA_SIZE = 4096 def extract_7z_files(folder_path): total_size_lba = 0 zero_lba_count = 0 for root, dirs, files in os.walk(folder_path): for file in files: if file.endswith('.7z'): file_path = os.path.join(root, file) # 创建tmp目录 tmp_dir = os.path.join(os.path.splitext(file_path)[0], 'tmp') os.makedirs(tmp_dir, exist_ok=True) print("开始解压 %s 到 %s" % (file_path, tmp_dir)) try: with open(file_path, 'rb') as f: archive = py7zlib.Archive7z(f) for name in archive.getnames(): outfilename = os.path.join(tmp_dir, name) outdir = os.path.dirname(outfilename) if not os.path.exists(outdir): os.makedirs(outdir) outfile = open(outfilename, 'wb') outfile.write(archive.getmember(name).read()) outfile.close() except Exception as e: print("解压 %s 时出现错误: %s" % (file_path, str(e))) print("完成解压 %s 到 %s" % (file_path, tmp_dir)) # 遍历解压后的文件 for root_extracted, dirs_extracted, files_extracted in os.walk(tmp_dir): for bin_file in files_extracted: if bin_file.endswith('.bin'): bin_file_path = os.path.join(root_extracted, bin_file) # 读取bin文件 with open(bin_file_path, 'rb') as f: while True: lba = f.read(LBA_SIZE) if not lba: break total_size_lba += 1 if lba == b'\x00' * LBA_SIZE: zero_lba_count += 1 # 删除解压后的tmp目录 shutil.rmtree(tmp_dir) # 计算全0 LBA的百分比 if total_size_lba > 0: zero_lba_percentage = (zero_lba_count / total_size_lba) * 100 else: zero_lba_percentage = 0 # 输出结果 print("解压缩后所有文件的总size(单位lba): %d" % total_size_lba) print("全0 lba数量: %d" % zero_lba_count) print("全0 lba的百分比: %.2f%%" % zero_lba_percentage) # 指定文件夹路径 folder_path = 'your_folder_path' extract_7z_files(folder_path) ``` 在上述代码中,在解压操作前后添加了相应的打印语句,并且对解压过程进行了异常处理,若出现错误会打印错误信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值