处理大型文件的最佳Python Zip模块是什么?
编辑:特别是压缩和提取速度 有什么建议吗处理大型文件的最佳Python Zip模块是什么?,python,performance,compression,zip,extraction,Python,Performance,Compression,Zip,Extraction,编辑:特别是压缩和提取速度 有什么建议吗 谢谢所以我做了一个随机大小的拉链: $ ls -l *zip -rw-r--r-- 1 aleax 5000 115749854 Nov 18 19:16 large.zip $ unzip -l large.zip | wc 23396 93633 2254735 i、 例如,116MB,其中包含23.4K文件,并且计时: $ time unzip -d /tmp large.zip >/dev/null real 0m
谢谢所以我做了一个随机大小的拉链:
$ ls -l *zip
-rw-r--r-- 1 aleax 5000 115749854 Nov 18 19:16 large.zip
$ unzip -l large.zip | wc
23396 93633 2254735
i、 例如,116MB,其中包含23.4K文件,并且计时:
$ time unzip -d /tmp large.zip >/dev/null
real 0m14.702s
user 0m2.586s
sys 0m5.408s
这是系统提供的命令行解压二进制文件——毫无疑问,它可以像纯C可执行文件一样进行微调和优化。然后(在清理/tmp;-)…:
…这是Python及其标准库—对CPU时间的要求有点高,但实际速度要快10%以上,即运行时间
当然,欢迎您重复这样的测量(在您的特定平台上——如果是CPU不足的平台,例如速度较慢的ARM芯片,那么Python对CPU时间的额外需求可能最终会使其速度变慢——以及您感兴趣的特定zipfiles,因为每个大zipfile将有非常不同的组合,并且很可能具有不同的性能)。但这对我来说意味着,构建Python扩展的空间并没有旧的
zipfile
那么大,因为Python使用它要比纯C、系统包含的解压快得多 要在不将大文件加载到内存的情况下处理它们,请使用Python 2.6版本的zipfile
中新的基于流的方法,例如zipfile.open
除非已对ZIP中的文件名进行了严格清理,否则不要使用extract
或extractall
(您以前必须
将所有字节读入内存,或者对其进行类似的破解;现在已经过时了。)您是否将zipfile的性能与直接在shell中使用zip/unzip的性能进行了比较?感谢您的分析,这非常有帮助。看到内存使用量测量结果也会很好+1不管怎样。显然,你的里程数可能会有所不同。。。我发现使用zipfile.open()
动态打开压缩内容实际上比从文件系统打开相同数量的文件(即以前从.zip存档中提取的文件)要快一些。这可能是因为zipfile.open()
使用了已经打开的.zip文件,并且不需要文件系统目录和文件打开操作的开销。免责声明:我必须处理许多压缩率很低的小文件。YMMV具有更大的文件,或者当存档中没有那么多文件时。我使用了Python 3.5.3。
$ time py26 -c'from zipfile import ZipFile; z=ZipFile("large.zip"); z.extractall("/tmp")'
real 0m13.274s
user 0m5.059s
sys 0m5.166s