从python中的tar存档中提取压缩的gz文件

易怒症候群

我正在尝试使用 Python 3.6.5 从 tar 存档中提取压缩文件。

我正在尝试从包含压缩的 gz 文件的 tar 存档中提取文件。我遵循了这个Stackoverflow 回答的建议

import tarfile,os
import sys
tar = tarfile.open("arXiv_src_9107_001a.tar")
n = 0
for member in tar.getmembers():
    #Skip directory labeled at the top
    if(n==0):
        n=1
        continue
    f=tar.extractfile(member)
    print(member)
    content=f.read()
    print("{} has {} newlines".format(member, content.count("\n")))
    print("{} has {} spaces".format(member, content.count(" ")))
    print("{} has {} characters".format(member, len(content)))
    #sys.exit()
tar.close()

当我打印出来vars(tar)pdb

(Pdb) p vars(tar)
{'mode': 'r', '_mode': 'rb', '_extfileobj': False, 'name': '/Users/user/Downloads/arXiv_src_9107_001a.tar', 'fileobj': <_io.BufferedReader name='arXiv_src_9107_001a.tar'>, 'errors': 'surrogateescape', 'pax_headers': {}, 'copybufsize': None, 'closed': False, 'members': [<TarInfo '9107' at 0x11004b048>, <TarInfo '9107/hep-lat9107001.gz' at 0x11004b110>, <TarInfo '9107/hep-lat9107002.gz' at 0x11004b1d8>, <TarInfo '9107/qc_01.gz' at 0x11004b2a0>, <TarInfo '9107/qc_02.gz' at 0x11004b368>, <TarInfo '9107/qi_01.gz' at 0x11004b430>, <TarInfo '9107/qs_01.gz' at 0x11004b4f8>, <TarInfo '9107/quant_only_01.gz' at 0x11004b5c0>], '_loaded': True, 'offset': 69120, 'inodes': {}, 'firstmember': None}

如果我打印出content变量,我会得到一个字节对象。例如:

b'\x1f\x8b\x08\x08\xe5C\x12M\x00\x03hep-lat9107001\x00\xed}{w\xdbF\x92\xef\xfc\x1b|\x8a\xbe\xf72\x13i#R\x00\x08\xf0\x91\x8c\xf7\x1c?c\xcf\xc6\x8f\xb5\x9d\xc9\xeeZN\x06"!\tc\x92\xe0\x10\xa0d\x85W\xf9\xec\xf...

问题

在 tar 存档由单独压缩的文件组成的情况下,如何将这些 gz 文件读取/解压缩为可用的人类语言字符串?

贾斯汀以西结

您可以使用gzip.decompress

import tarfile, os, gzip
import sys
tar = tarfile.open("arXiv_src_9107_001a.tar")
n = 0
for member in tar.getmembers():
    #Skip directory labeled at the top
    if(n==0):
        n=1
        continue
    f=tar.extractfile(member)
    print(member)
    content=f.read()
    expanded = gzip.decompress(content)
    # do whatever with expanded here
tar.close()

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python 3:从tar.gz存档中提取文件

如何从python中的.tar存档中提取特定文件?

在 .tar 中的 .gz 中提取文件而不解压缩这两个

从.tar.bz2存档中的文件中提取行

如何从大型tar.gz存档中提取单个文件夹?

如何在 Python 中的 zip 文件中提取 tar.gz 文件的成员

如何从tar存档中提取特定文件?

将tar.gz存档中压缩的多个文件读入Spark

Python:从tar.gz中提取具有模式的特定文件,而无需提取完整文件

正确区分压缩的.gz文件和存档的tar.gz文件?

提取.gz文件中的.TAR文件

从 (GNU)tar 存档中提取子文件夹

仅使用其URL从在线tar存档中提取文件

从Nim中的tar.gz存档中读取文件

用bash从tar.gz中提取1个文件

从tar.gz中提取特定文件夹

如何从tar.gz中提取特定文件

从非常大的tar.gz中提取许多文件

如何从tar.gz存档中删除单个文件

提取tar.gz文件将返回“看起来不像tar存档”。

从7压缩自解压存档(SFX)存档中提取文件后,是否可以执行文件?

如何在python中提取gz文件

在python中,如果解压缩tar.gz文件,如何获取或设置结果文件的名称

我有一个包含许多 .tar.gz 文件的文件夹。在 python 中,我想进入每个文件解压缩或压缩并找到具有我想提取的字符串的文本文件?

从Go中的tar文件中提取

使用 python 从 .tar.gz 文件中仅提取 jpg 文件

tar.gz在压缩之前或之后将gzip文件压缩到tar中吗?

如何完全从Java中的内存(无文件)中的对象创建tar或tar.gz存档

如何从Colab笔记本中提取Google Cloud Storage存储桶中的tar.gz文件?