在 Python 中读取 .tar.gz 文件

新手上路,请多包涵

我有一个 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)

错误如下:

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

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

原文由 KrunalParmar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

文档 告诉我们,如果成员不是常规文件或链接, extractfile() 将返回 None

一种可能的解决方案是跳过 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()

原文由 Raymond Hettinger 发布,翻译遵循 CC BY-SA 3.0 许可协议

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)

原文由 mhawke 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题