在Python中读取*.tar.gz文件而不解压缩

5
在Python 3中,我正在尝试读取存储在tar.gz归档文件中的文件,而无需提取它们(即不将提取文件写入磁盘)。我找到了tarfile模块,并编写了以下代码(大大简化):
tar = tarfile.open('arhivename.tar.gz',encoding='utf-8')
for x in tar.getmembers():
    filelikeobject=tar.extractfile(x)
    #pass the filelikeobject to a third party function that accepts file-like object that read strings

    #the following lines are for debug:
    r=filelikeobject.read()
    print(type(r).__name__) #prints out 'bytes' - need 'str'

问题是,tar.extractfile(x) 返回的文件对象在调用read()方法时返回字节。我需要它使用utf-8编码返回字符串。
1个回答

7
当你调用tarfile.open时,
tarfile.open('arhivename.tar.gz', encoding='utf-8')

encoding参数控制文件名的编码,而不是文件内容的编码。因为tar文件中的不同文件可能具有不同的编码方式,所以让encoding参数控制文件内容的编码是没有意义的。因此,tar文件实际上只包含二进制数据。

您可以通过使用codecs模块中的UTF-8流读取器来解码这些数据:

import codecs
utf8reader = codecs.getreader('utf-8')
for name in tar.getmembers():
    fp = utf8reader(tar.extractfile(name))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接