处理大文件的最佳 Python Zip 模块是什么?
编辑:特别是压缩和提取速度。
有什么建议吗?
谢谢
EDIT: Specifically compression and extraction speeds.
Any Suggestions?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
编辑:特别是压缩和提取速度。
有什么建议吗?
谢谢
EDIT: Specifically compression and extraction speeds.
Any Suggestions?
Thanks
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
因此,我制作了一个随机的大型 zip 文件:
即 116 MB,其中有 23.4K 个文件,还有定时的东西:
这是系统提供的命令行解压缩二进制文件——毫无疑问,它与纯 C 可执行文件一样经过微调和优化。是。然后(清理 /tmp;-)...:
...这是 Python 及其标准库 - 对 CPU 时间的要求更高一些,但实际上(即经过的时间)快了 10% 以上。
当然,欢迎您重复这样的测量(在您的特定平台上 - 如果它的 CPU 较差,例如缓慢的 ARM 芯片,那么 Python 对 CPU 时间的额外要求可能最终会使其变慢 - 以及您感兴趣的特定 zip 文件,因为每个大的 zip 文件将具有非常不同的组合,并且很可能具有不同的性能)。但这对我来说意味着没有足够的空间来比旧的 zipfile 更快地构建 Python 扩展 - 因为使用它的 Python 击败了纯 C、系统包含的解压缩! -)
So I made a random-ish large zipfile:
i.e., 116 MB with 23.4K files in it, and timed things:
this is the system-supplied commandline unzip binary -- no doubt as finely-tuned and optimized as a pure C executable can be. Then (after cleaning up /tmp;-)...:
...and this is Python with its standard library - a bit more demanding of CPU time, but over 10% faster in real, that is, elapsed time.
You're welcome to repeat such measurements of course (on your specific platform -- if it's CPU-poor, e.g a slow ARM chip, then Python's extra demands of CPU time may end up making it slower -- and your specific zipfiles of interest, since each large zipfile will have a very different mix and quite possibly performance). But what this suggests to me is that there isn't that much space to build a Python extension much faster than good old
zipfile
-- since Python using it beats the pure-C, system-included unzip!-)要处理大文件而不将其加载到内存中,请使用 Python 2.6 版本的
zipfile
中基于流的新方法,例如ZipFile.open
。 不要使用extract
或extractall
,除非您已对 ZIP 中的文件名进行了严格清理。(您过去必须
读取
所有字节到内存中,或者像zipstream;现在已过时。)For handling large files without loading them into memory, use the new stream-based methods in Python 2.6's version of
zipfile
, such asZipFile.open
. Don't useextract
orextractall
unless you have strongly sanitised the filenames in the ZIP.(You used to have to
read
all the bytes into memory, or hack around it like zipstream; this is now obsolete.)