如何打开一个 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",第二次调用提取它。
这是我试过的代码:
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",第二次调用提取它。