python2 7讀取 7z壓縮的檔案

2021-08-04 22:35:43 字數 1493 閱讀 8625

系統:ubuntu14.04

開發環境:python2.7

實現功能:讀取.7z壓縮資料夾中的所有檔案

使用第三方包:pylzma和py7zlib

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

pip install pylzma
安裝和測試過程如下:

由於博主並沒有找到該包的任何官方文件,所以所有的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:

BAT呼叫7z壓縮程式

echo off set zip c program files 7 zip 7z.exe set timestamp date 6,4 date 0,2 date 3,2 set dir c temp echo zip echo dir echo timestamp explorer arc zi...

7z壓縮與解壓命令

在寫很多任務具的時候,可能會用到7z命令來進行壓縮與解壓操作。這裡記錄二個比較常用的操作 壓縮 解壓。在dos視窗下輸入7z命令,會顯示7z的使用引數詳情 usage 7z a add files to archive b benchmark d delete files from archive ...

命令列壓縮解壓7z

命令列壓縮解壓一 7z 1 簡介 7z,全稱7 zip,是一款開源軟體。是目前公認的壓縮比例最大的壓縮解壓軟體。主頁 中文主頁 主要特徵 全新的lzma演算法加大了7z格式的壓縮比 支援格式 壓縮 解壓縮 7z,xz,bzip2,gzip,tar,zip 僅解壓縮 arj,cab,chm,cpio,...