在python中有效地流式传输tar.gz文件

Ahm*_*dov 5 python gzip file tar python-3.x

我有一个非常大的.tar.gz文件列表(每个> 2GB)我想用python(Mannheim Webtables Corpus)处理.每个存档文件包含数百万个.json仅包含单个json对象的文件.我需要做的是逐个遍历所有文件,json使用文件内容创建一个对象并随后处理它.

当我尝试使用tarfile.open它时会非常缓慢,因为它试图将整个文件提取并加载到内存中.

这是我做的第一次尝试:

import os
import tarfile
input_files = os.listdir('CORPUS_MANNHEIM')
for file in input_files:
    with tarfile.open('CORPUS_MANNHEIM'+'/'+file) as tfile:
        for jsonfile in tfile.getmembers():
            f=tfile.extractfile(jsonfile)
            content=f.read()
            print(content)
Run Code Online (Sandbox Code Playgroud)

上面的代码非常慢,并且崩溃了Jupyter笔记本.我有另一个语料库,.gz其中包含我可以轻松迭代的文件列表.但是,对于.tar.gz文件,似乎没有办法.

我已经尝试了一些其他选择,如第一次提取.tar的文件.tar.gz使用的文件gunziptar -xvf再没有运气处理.

如果您需要任何进一步的细节,请告诉我.我试图让问题尽可能短.

编辑:当我尝试使用读取.tar文件时head,它似乎可以非常快速地流式传输.输出有点奇怪.它首先输出文件名继续文件的内容,这有点不方便.你可以试试head --bytes 1000 03.tar.

编辑:我的问题与其他类似性质的问题不同,即使我尝试流式传输,tarfile似乎根本不起作用.因此,我需要一种更有效的方法 - 类似于headless在Linux中的东西,可以立即获得流而无需提取哪个tarfile.