在不提取的情况下在python中读取* .tar.gz文件

伊加尔

在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编码返回str

迪特里希·埃普

打电话时tarfile.open

tarfile.open('arhivename.tar.gz', encoding='utf-8')

encoding参数控制文件名的编码,而不控制文件内容的编码。encoding参数控制文件内容的编码没有意义,因为tar文件中的不同文件可以不同地编码。因此,tar文件实际上仅包含二进制数据。

您可以通过使用来自codecs模块的UTF-8流阅读器包装文件来解码此数据

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章