我以前从未使用过zip文件模块。我有一个目录,其中包含我需要处理的数千个 zip 文件。这些文件最大可达 6GB。我浏览了一些文档,但其中很多文档并不清楚读取大型 zip 文件而不需要解压的最佳方法是什么。
我偶然发现了这个:在Python中逐行读取一个大的压缩文本文件
因此,在我的解决方案中,我尝试模拟它并使用它,就像我使用 with open 函数读取普通文本文件一样
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 对象顺便说一句
当我取消缓冲并只使用 z.open() 时,我收到一条错误消息:
TypeError: open() missing 1 required positional argument: 'name'
打开 zip 文件后,您仍然需要打开其中包含的各个文件。这是您遇到的第二个
z.open
问题。它不是内置的 python open
并且它没有“缓冲”参数。参见ZipFile.open
打开 zip 文件后,您可以枚举其文件并依次打开它们。 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)