在python

时间:2018-02-21 14:20:59

标签: python python-3.x file tar gz

我有一个非常大的.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)

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

我尝试了其他一些选项,例如首先使用.tar.tar.gzgunzip文件中提取tar -xvf文件,然后进行处理,没有运气。

如果您需要任何进一步的详细信息,请与我们联系。我试图让问题尽可能短。

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

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

0 个答案:

没有答案