我有一個很大的zip文件,里面有一個文件。我想將該文件解壓到給定目錄以進(jìn)行進(jìn)一步處理,并使用以下代碼:
def unzip(zipfile: ZipFile, filename: str, dest: str):
ZipFile.extract(zipfile, filename, dest)
調(diào)用此函數(shù)時使用:
with ZipFile(file_path, "r") as zip_source:
unzip(zip_source, zip_source.infolist()[0], extract_path) # extract path is correctly defined earlier in the code
似乎解壓縮一個大文件需要很長時間(文件大小>500MB),我想優(yōu)化這個解決方案。
我發(fā)現(xiàn)的所有優(yōu)化都是基于多處理的,以便更快地提取多個文件,但是,我的zip只包含一個文件,所以多處理似乎不是解決方法。
如果一個zip文件中有一個文件,則不能并行解壓縮,因?yàn)樵撐募?shí)際上是使用常用的解壓縮算法LZ77/LZW/LZSS壓縮的。這些算法本質(zhì)上是連續(xù)的。
此外,這些解壓方法的速度很慢(通常比從存儲設(shè)備讀取文件慢得多)。這主要是因?yàn)樗惴ū旧淼膹?fù)雜性,以及大多數(shù)主流處理器無法大幅度提高計算速度的事實(shí)。
因此,沒有辦法更快地解壓文件,盡管您可以通過使用另一個庫找到稍微快一點(diǎn)的實(shí)現(xiàn)。