赞
踩
撰写时间:2017.8.4
系统:ubuntu14.04
开发环境:python2.7
实现功能:读取.7z压缩文件夹中的所有文件
使用第三方包:pylzma和py7zlib
注:pylzma包含py7zlib包,所以只需要安装pylzma即可
pip install pylzma
安装和测试过程如下:
首先贴一下该包的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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。