带有 Zipfile 模块的大型 Zip 文件 Python
Large Zip Files with Zipfile Module Python
我以前从未使用过压缩文件模块。我有一个目录,其中包含我需要处理的数千个 zip 文件。这些文件最大可达 6GB。我查看了一些文档,但其中很多都不清楚读取大型 zip 文件而不需要解压缩的最佳方法是什么。
我偶然发现了这个:Read a large zipped text file line by line in python
所以在我的解决方案中,我尝试模拟它并像使用 with open 函数读取普通文本文件一样使用它
with open(odfslogp_obj, 'rb', buffering=102400) as odfslog
所以我根据 link 的答案写了以下内容:
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
你有问题。它不是内置的 python open
并且它没有“缓冲”参数。参见 ZipFile.open
压缩文件打开后,您可以枚举其文件并依次打开它们。 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)
我以前从未使用过压缩文件模块。我有一个目录,其中包含我需要处理的数千个 zip 文件。这些文件最大可达 6GB。我查看了一些文档,但其中很多都不清楚读取大型 zip 文件而不需要解压缩的最佳方法是什么。
我偶然发现了这个:Read a large zipped text file line by line in python
所以在我的解决方案中,我尝试模拟它并像使用 with open 函数读取普通文本文件一样使用它
with open(odfslogp_obj, 'rb', buffering=102400) as odfslog
所以我根据 link 的答案写了以下内容:
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
你有问题。它不是内置的 python open
并且它没有“缓冲”参数。参见 ZipFile.open
压缩文件打开后,您可以枚举其文件并依次打开它们。 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)