在Python中逐步读取大型多部分压缩文本文件

Jon*_*sco 6 python zip parsing stream

我有一个非常大的zip文件,它被分成多个部分作为拆分档案,在档案中有一个文件.我没有足够的资源将这些档案组合在一起或提取它们(原始文本文件接近1TB).

我想逐行解析文本文件,理想情况下使用这样的东西:

import zipfile
for zipfilename in filenames:
    with zipfile.ZipFile(zipfilename) as z:
        with z.open(...) as f:
            for line in f:
                print line
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果是这样,我该如何阅读文本文件:

  1. 不使用太多内存(将整个文件加载到内存中显然是不可能的)
  2. 没有提取任何zip文件
  3. (理想情况下)没有组合zip文件

预先感谢您的帮助.

Tob*_*bia 4

我来一刺。

如果您的 zip 文件是根据 Zip 文件格式所谓的“分割存档”,则您将无法使用 Python 的 zipfile 库或unzip终端命令来读取它们。

另一方面,如果您正在处理已使用命令split或类似字节拆分设备拆分的单个 zip 存档,则您可能能够在 Python 中即时提取并读取其内容。

您必须编写一个“类似文件”的自定义类,该类将接受eek()和read()方法(可能还有其他方法)并在分割块上执行它们。

eek() 需要计算要读取哪个 zip 文件,打开它(如果它不是当前打开的文件)并使用偏移量的差异对其执行eek()。

read() 将从当前打开的块中读取,处理文件结束条件,这将导致它打开下一个块并完成对其的读取。

编写并测试此类后,只需调用 ZipFile 构造函数并将类的实例作为要打开的“虚拟 zip”文件对象传递即可。