我有一个tar文件,其中包含许多文件。我需要编写一个python脚本,该脚本将读取文件的内容并提供总数字符的计数,包括字母,空格,换行符的总数,所有内容,而无需解压缩tar文件。
我有一个tar文件,其中包含许多文件。我需要编写一个python脚本,该脚本将读取文件的内容并提供总数字符的计数,包括字母,空格,换行符的总数,所有内容,而无需解压缩tar文件。
Answers:
您可以使用 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()
等等。
'r|'
选项,tarfile模块似乎也占用了我的内存。
tar.members = []
。此处的更多信息:bit.ly/JKXrg6
tar.getmembers()
放入for member in tar.getmembers()
循环时会被多次调用?
您需要使用tarfile模块。具体来说,您使用类TarFile的实例访问文件,然后使用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(zip(myArchive.getnames(), myArchive.getmembers()))['path/to/file'] ).read()
@ stefano-borini提到的方法的实现,通过这样的文件名访问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您可以使用tarfile.list()ex:
filename = "abc.tar.bz2"
with open( filename , mode='r:bz2') as f1:
print(f1.list())
得到这些数据之后。您可以操纵该输出或将其写入文件,并执行您的任何要求。