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

来源:互联网 发布:广电网络运维体系建设 编辑:程序博客网 时间:2024/05/22 22:21

撰写时间: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()#searchstartTime = 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

原创粉丝点击