使用Zipfile模块Python的大型Zip文件



我以前从未使用过zip文件模块。我有一个目录,其中包含我需要处理的数千个zip文件。这些文件的大小可达6GB。我看过一些文档,但其中很多都不清楚在不需要提取的情况下读取大型zip文件的最佳方法是什么。

我偶然发现:在python 中逐行读取一个大的压缩文本文件

所以,在我的解决方案中,我试图模仿它,并像阅读带有打开功能的普通文本文件一样使用它

with open(odfslogp_obj, 'rb', buffering=102400) as odfslog

因此,我根据该链接的答案写下了以下内容:

for odfslogp_obj in odfslogs_plist:
with zipfile.ZipFile(odfslogp_obj, mode='r') as z:
with z.open(buffering=102400) as f:
for line in f:
print(line)

但这给了我一个";意外关键字";z.open((错误

问题是,是否有文档解释了z.open((函数将使用哪些关键字?我只为.ZipFile((函数找到了一个。

我想确保我的代码在逐行处理这些文件时不会占用太多内存。

odfslogp_obj是一个Path对象btw

当我去掉缓冲区,只打开z.open((时,我会得到一个错误:TypeError: open() missing 1 required positional argument: 'name'

打开zip文件后,仍然需要打开其中包含的各个文件。你的第二个z.open有问题。它不是内置的pythonopen;缓冲";参数参见ZipFile.open

一旦zipfile被打开,你就可以枚举它的文件并依次打开它们。ZipFile.open以二进制模式打开,这可能是一个不同的问题,具体取决于您想对文件做什么。

for odfslogp_obj in odfslogs_plist:
with zipfile.ZipFile(odfslogp_obj, mode='r') as z:
for name in z.namelist():
with z.open(name) as f:
for line in f:
print(line)

最新更新