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("train.7z",'rb')
#生成一个archive对象
archive = py7zlib.Archive7z(fp)

#读取文件中所有的文件名
names = archive.getnames()
#search
startTime = time.time()

#根据文件名返回文件的archiveFile类
member = archive.getmember(names[0])
end_1_time = time.time()
print "search time is {}".format(end_1_time-startTime)

#read data
#读取文件的所有数据
data = member.read()
end_2_time = time.time()
print "read time is {}".format(end_2_time-end_1_time)

读出的data数据就是names[0]文件的内容

问题:由于分析的文件比较大,在train.7z文件中有2w+个子文件,在读取文件的过程中会很慢
因为py7zlib的read函数是一次将文件中的所有数据全部都读出来,所以一开始我认为是读取的内容太大,导致读取文件的速度太慢。
但是最后通过分析可以得出是因为子文件的位置太靠后,才导致了文件读取速度较慢。
详情消耗时间可以看下图。
读取第一个文件:
读取第一个文件

读取第9000个文件耗时:
这里写图片描述

无奈水平太低,从他的源码中也看不出来为什么文件耗时这么大,
最后将所有的文件解压出来,然后分析的。

参考资料

[stackoverflow]Example of how to use PyLZMA:https://stackoverflow.com/questions/10701528/example-of-how-to-use-pylzma/12292596
[github]py7zlib的项目地址:https://github.com/fancycode/pylzma/blob/master/py7zlib.py

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值