我有一个非常大的.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.gz
从gunzip
文件中提取tar -xvf
文件,然后进行处理,没有运气。
如果您需要任何进一步的详细信息,请与我们联系。我试图让问题尽可能短。
编辑:当我尝试使用head
读取.tar文件时,它似乎可以非常快速地传输。输出有点奇怪。它首先输出文件名继续文件的内容,这有点不方便。您可以尝试使用head --bytes 1000 03.tar
。
编辑:我的问题与其他类似性质的问题不同,即使我尝试使用流式传输,tarfile似乎根本不起作用。因此,我需要一种更有效的方法 - 类似于Linux中的head
或less
,可以立即获取流而无需提取哪个tarfile。