如何在python3中读取和列出tgz文件?

时间:2019-07-01 11:22:29

标签: python gzip tar

在python 3(3.6.8)中,我想读取gzip压缩的tar文件并列出其内容。

我发现this solution会产生错误

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

在找到的this suggestion中搜索此错误,因此我尝试了以下代码段:

with open(out_file) as fd:
    gzip_fd = gzip.GzipFile(fileobj=fd)
    tar = tarfile.open(gzip_fd.read())

产生相同的错误!

那怎么做对呢?

即使在查看实际文档here时,我也想到了以下代码:

tar = tarfile.open(out_file, "w:gz")
for member in tar.getnames():
   print(tar.extractfile(member).read())

最终可以正常运行-但没有在屏幕上打印tar存档的任何内容!

tar文件格式正确,包含文件夹和文件。 (我需要尝试共享此文件)

3 个答案:

答案 0 :(得分:0)

当您open未指定mode的文件时,默认情况下将其读取为文本。您需要使用mode='rb'标志将文件作为原始字节流打开,然后将其提供给gzip阅读器

with open(out_file, mode='rb') as fd:
    gzip_fd = gzip.GzipFile(fileobj=fd)
    tar = tarfile.open(gzip_fd.read())

答案 1 :(得分:0)

python-archive模块(可在pip上获得)可以帮助您:

from archive import extract

file = "you/file.tgz"
try:
    extract(file, "out/%s.raw" % (file), ext=".tgz")
except:
    # could not extract
    pass

可用的扩展名是(v0.2):'.zip','。egg','。jar','。tar','。tar.gz','。tgz','。tar.bz2' ,“。tz2”

更多信息:https://pypi.org/project/python-archive/

答案 2 :(得分:0)

不确定为什么以前不起作用,但是以下解决方案对我有用,以便使用python 3.6列出gzip压缩tar存档的文件和文件夹

tar = tarfile.open(filename, "r:gz")
print(tar.getnames())