首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Python读取.tar.gz文件

用Python读取.tar.gz文件
EN

Stack Overflow用户
提问于 2016-05-27 04:17:45
回答 6查看 66.7K关注 0票数 37

我有一个25 of的文本文件。所以我把它压缩成tar.gz,它变成了450 MB。现在,我想从python中读取该文件,并处理文本data.for,这是我所提到的问题。但在我的案例中代码不起作用。守则如下:

代码语言:javascript
运行
复制
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)

错误如下:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "dataExtPlot.py", line 21, in <module>
    content = f.read()
AttributeError: 'NoneType' object has no attribute 'read'

另外,还有其他方法来完成这个任务吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-05-27 04:22:13

文档告诉我们,如果成员不是常规文件或链接,则提取文件()不会返回任何内容。

一个可能的解决方案是跳过无结果:

代码语言:javascript
运行
复制
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()
票数 45
EN

Stack Overflow用户

发布于 2016-05-27 04:24:41

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

代码语言:javascript
运行
复制
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)
票数 6
EN

Stack Overflow用户

发布于 2016-05-27 04:36:37

你可以试试这个

代码语言:javascript
运行
复制
t = tarfile.open("filename.gz", "r")
for filename in t.getnames():
    try:
        f = t.extractfile(filename)
        Data = f.read()
        print filename, ':', Data
    except :
        print 'ERROR: Did not find %s in tar archive' % filename
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37474767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档