如何打开一个 tarfile 并获取其中一个文件中的数据?

How to open a tarfile and get the data that's inside one of its files?

这是我试过的代码:

import tarfile

# Opening zipped tarfile archive
t = tarfile.open(r'C:\Users\Luke\Desktop\my data.gz', "r:gz") 

t.getmembers() #Showing members within tarfile archive

它打印这个:

TarInfo './._SA00000' at 0x2a9431ea430,
TarInfo 'SA00000' at 0x2a9431ea5c0,   #theres more members didn't want to show them all

我试过了:

x = t.extract('SA00000')

print(x)

它打印 None.

我真的不明白。我打开了 notepad 中的 tarfile,所有数据都在那里。

不知道这是否有帮助,但我在 windows 10 上使用 python 3,数据是从 MacOS 提供给我的。

Tar 文件只是 linux 文件分组,没有真正的压缩。 tar.gz 是同一件事,但有压缩。无论您有 tar 还是 tar.gz 文件,您都可以通过在压缩软件(推荐 7zip)中打开文件来查看内部结构。

如果你想以编程方式进行,我仍然建议使用 7zip,但在名为 7za.exe 的独立 CLI 版本中(7-Zip Extra:独立控制台版本,7z DLL,Far Manager 插件) .

这将为您提供 7zip 的所有功能,而无需 GUI 膨胀。您将能够从您的应用程序中调用它;它看起来像你使用 python 所以你可能会使用 subprocess 模块。这是一个例子:

def decompress():
     out=subprocess.call("7za.exe e -y -o'OUTPUT_FILE_NAME_1.tar' INPUT_FILENAME_1.tar.gz",stdout=fout,stderr=ferr)
        output=fout.read())  
        errors = ferr.read()
        if !errors:
            out=subprocess.call("7za.exe x -y -o'OUTPUT_FILE_NAME_2' OUTPUT_FILE_NAME_1.tar ",stdout=fout,stderr=ferr)
            output=fout.read())  
            errors = ferr.read() 

您最终会得到一个名为 OUTPUT_FILE_NAME_2 的文件夹或文件,然后您可以像 tar/tar.gz 文件从未存在过一样行走。第一次调用解压缩 "tarball",第二次调用提取它。

7za.exe reference