用Python阅读.tar.gz文件

Kru*_*mar 20 python gzip file tar

我有一个25GB的文本文件.所以我把它压缩到tar.gz,它变成450 MB.现在我想从python中读取该文件并处理文本数据.对于这个我提到的问题.但在我的情况下代码不起作用.代码如下:

import tarfile
import numpy as np 

tar = tarfile.open("filename.tar.gz", "r:gz")
for member in tar.getmembers():
     f=tar.extractfile(member)
     content = f.read()
     Data = np.loadtxt(content)
Run Code Online (Sandbox Code Playgroud)

错误如下:

Traceback (most recent call last):
  File "dataExtPlot.py", line 21, in <module>
    content = f.read()
AttributeError: 'NoneType' object has no attribute 'read'
Run Code Online (Sandbox Code Playgroud)

还有,还有其他方法可以完成这项任务吗?

Ray*_*ger 27

文件告诉我们,没有被返回extractfile()如果该成员是不是一个普通的文件或链接.

一种可能的解决方案是跳过None结果:

tar = tarfile.open("filename.tar.gz", "r:gz")
for member in tar.getmembers():
     f = tar.extractfile(member)
     if f is not None:
         content = f.read()
Run Code Online (Sandbox Code Playgroud)


mha*_*wke 6

tarfile.extractfile()None如果成员既不是文件也不是链接,则可以返回。例如,您的 tar 存档可能包含目录或设备文件。修理:

import tarfile
import numpy as np 

tar = tarfile.open("filename.tar.gz", "r:gz")
for member in tar.getmembers():
     f = tar.extractfile(member)
     if f:
         content = f.read()
         Data = np.loadtxt(content)
Run Code Online (Sandbox Code Playgroud)