我有一个tar文件,里面有一些文件。 我需要编写一个python脚本,它将读取文件的内容,并给出包括总字符数,空格,换行符,所有内容在内的总数,而不需要解压tar文件。在没有解压缩的情况下读取tar文件内容,在python脚本中
回答
你可以使用getmembers()
>>> import tarfile
>>> tar = tarfile.open("test.tar")
>>> tar.getmembers()
之后,你可以使用extractfile()的成员提取物作为文件对象。只是一个例子
import tarfile,os
import sys
os.chdir("/tmp/foo")
tar = tarfile.open("test.tar")
for member in tar.getmembers():
f=tar.extractfile(member)
content=f.read()
print "%s has %d newlines" %(member, content.count("\n"))
print "%s has %d spaces" % (member,content.count(" "))
print "%s has %d characters" % (member, len(content))
sys.exit()
tar.close()
随着在上面的例子中文件对象“F”,你可以使用read(),readlines方法()等
“可以改为”for tar for成员“,它可以是一个生成器或一个迭代器(我不知道是哪一个)。但它一次只能获得一个成员。 – huggie 2011-12-28 09:24:04
我刚刚有一个类似的问题,但tarfile模块似乎吃我的内存,即使我用'r |''选项。 – devsnd 2012-05-21 17:39:52
啊。我解决了它。假设你会像huggie暗示的那样编写代码,你必须偶尔“清除”成员列表。因此,考虑到上面的代码示例,这将是'tar.members = []'。更多信息在这里:http://bit.ly/JKXrg6 – devsnd 2012-05-21 17:45:51
您需要使用tarfile模块。具体而言,您使用类tar文件的实例与TarFile.getnames()
| getnames(self)
| Return the members of the archive as a list of their names. It has
| the same order as the list returned by getmembers().
访问该文件,然后访问的名称相反,如果你想阅读的内容,那么你用这个方法
| extractfile(self, member)
| Extract a member from the archive as a file object. `member' may be
| a filename or a TarInfo object. If `member' is a regular file, a
| file-like object is returned. If `member' is a link, a file-like
| object is constructed from the link's target. If `member' is none of
| the above, None is returned.
| The file-like object is read-only and provides the following
| methods: read(), readline(), readlines(), seek() and tell()
请注意,您可以通过像myFile = myArchive.extractfile(dict(myArchive.getnames(),myArchive.getmembers()))['path/to/file'])构造的索引访问成员。对于tar.getmembers()中的成员,read()' – ThorSummoner 2014-04-26 07:28:23
由@斯特凡诺 - 博里尼 提到的方法的实施方案通过文件名访问tar归档成员,像这样
#python3
myFile = myArchive.extractfile(
dict(zip(
myArchive.getnames(),
myArchive.getmembers()
))['path/to/file']
).read()`
现金
dict(zip(
从https://stackoverflow.com/a/209854/1695680tarfile.getnames
从https://stackoverflow.com/a/2018523/1695680- 此外,对于我的用途,阅读从缓冲How to construct a TarFile object in memory from byte buffer in Python 3?
- 1. 如何在不用java解压缩的情况下读取压缩文件的内容
- 2. 在没有解压缩的情况下包含ant build xml内联jar文件?
- 3. 如何在没有解压缩的情况下从.gz压缩文件中获取几行
- 4. Node.js在不解压的情况下读取zip文件
- 5. 如何在没有先将S3复制到服务器的情况下在S3上压缩/ tar文件?
- 6. 如何在不解压缩内容的情况下在.tar.gz压缩文件中查看特定文件的内容?
- 7. 使用golang阅读tar文件的内容而不解压
- 8. 在python中压缩和解压缩文本文件
- 9. 在不改变缩进的情况下压缩文本
- 10. 在没有getopts的情况下在shell脚本中添加使用内容
- 11. 在通配符的Python脚本中解压缩文件
- 12. tar文件没有完全解压
- 13. 如何列出Java中压缩的tar文件的内容
- 14. 在没有Oracle Lite的情况下读取Oracle Lite ODB文件
- 15. 如何在不解压缩的情况下列出zip压缩文件中的文件?
- 16. 在没有InAppPurchase的情况下解锁内容
- 17. 使用C#解压缩tar/BZ2文件
- 18. 使用C#解压缩tar文件
- 19. 在没有线程的情况下同时执行python脚本
- 20. 在没有扩展名的情况下使用Python读取文件
- 21. 在没有GUI的情况下获取iPhone地址簿内容
- 22. 解压Z01,Z02,压缩在Python文件
- 23. Remux RTSP流入容器? (在没有解码的情况下写入读取帧)
- 24. 如何从tar中读取gz压缩文件
- 25. 解压缩文件的内容
- 26. 在没有完整下载的情况下阅读zip文件
- 27. 上传压缩文件,解压缩并读取文件
- 28. 如何在没有csv.writer的情况下在python中创建文本文件?
- 29. 如何使Eclipse在没有Eclipse-BundleShape标头的情况下解压缩包
- 30. 在没有es6脚本的情况下获取prevstate反应
你怎么能指望的字符/字母/空间/无解压那些别处寄托都tar归档? – YOU 2010-01-07 06:17:35
这正是问题所在。 – 2013-01-15 14:34:43