在python中读取*.tar.gz文件而不提取

在python中读取*.tar.gz文件而不提取,python,python-3.x,utf-8,Python,Python 3.x,Utf 8,在Python3中,我试图读取驻留在tar.gz归档文件中的文件,而不进行解压缩(也就是说不将解压缩文件写入磁盘)。我找到了tarfile模块,这是我写的(简化了很多): 问题是,tar.extractfile(x)返回一个file对象,该对象在调用read()时返回字节。我需要它在调用tarfile.open时使用utf-8编码返回str tarfile.open('arhivename.tar.gz', encoding='utf-8') encoding参数控制文件名的编码,而不是文件内

在Python3中,我试图读取驻留在tar.gz归档文件中的文件,而不进行解压缩(也就是说不将解压缩文件写入磁盘)。我找到了tarfile模块,这是我写的(简化了很多):


问题是,tar.extractfile(x)返回一个file对象,该对象在调用read()时返回字节。我需要它在调用
tarfile.open时使用utf-8编码返回str

tarfile.open('arhivename.tar.gz', encoding='utf-8')
encoding
参数控制文件名的编码,而不是文件内容的编码。
encoding
参数控制文件内容的编码没有意义,因为tar文件中的不同文件可以进行不同的编码。因此,tar文件实际上只包含二进制数据

您可以通过使用
编解码器
模块中的UTF-8流读取器包装文件来解码此数据:

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