使用 python 中的 tar 文件库从 tar 文件获取单个文件
Getting a single file from a tar file using the tarfile lib in python
我正在尝试从 tar 存档中获取单个文件。我有 tar 文件库,我可以做一些事情,比如在列表中找到具有正确扩展名的文件:
喜欢他们的例子:
def xml_member_files(self,members):
for tarinfo in members:
if os.path.splitext(tarinfo.name)[1] == ".xml":
yield tarinfo
member_file = self.xml_member_files(tar)
for m in member_file:
print m.name
太棒了,输出是:
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/lutBeta.xml
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/lutGamma.xml
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/lutSigma.xml
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/product.xml
如果我说只查找 product.xml 那么它不起作用。所以我尝试了这个:
ti = tar.getmember('product.xml')
print ti.name
并且它没有找到 product.xml 因为我事先猜测路径信息。我不知道如何只检索该路径信息,以便我可以在提取后获得我的 product.xml 文件(感觉就像我做事一样困难)但是,是的,我如何找出那个路径所以我在 xml 文件是从 tar 文件中提取的唯一文件后,可以将它连接到我的其他文件函数以读取和加载该文件吗?
我会先尝试做 TarFile.getnames()
,我想这很像命令行中的 tar tzf filename.tar.gz
。然后你会找出哪些路径可以提供给你的 getmember() 或 getmembers()。
Return 遍历 getnames()
的结果的完整路径。例如,获取 lutBeta.xml
的完整路径:
tar = tarfile.TarFile('mytarfile.tar')
membername = [x for x in tar.getnames() if os.path.basename(x) == 'lutBeta.xml'][0]
我正在尝试从 tar 存档中获取单个文件。我有 tar 文件库,我可以做一些事情,比如在列表中找到具有正确扩展名的文件:
喜欢他们的例子:
def xml_member_files(self,members):
for tarinfo in members:
if os.path.splitext(tarinfo.name)[1] == ".xml":
yield tarinfo
member_file = self.xml_member_files(tar)
for m in member_file:
print m.name
太棒了,输出是:
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/lutBeta.xml
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/lutGamma.xml
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/lutSigma.xml
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/product.xml
如果我说只查找 product.xml 那么它不起作用。所以我尝试了这个:
ti = tar.getmember('product.xml')
print ti.name
并且它没有找到 product.xml 因为我事先猜测路径信息。我不知道如何只检索该路径信息,以便我可以在提取后获得我的 product.xml 文件(感觉就像我做事一样困难)但是,是的,我如何找出那个路径所以我在 xml 文件是从 tar 文件中提取的唯一文件后,可以将它连接到我的其他文件函数以读取和加载该文件吗?
我会先尝试做 TarFile.getnames()
,我想这很像命令行中的 tar tzf filename.tar.gz
。然后你会找出哪些路径可以提供给你的 getmember() 或 getmembers()。
Return 遍历 getnames()
的结果的完整路径。例如,获取 lutBeta.xml
的完整路径:
tar = tarfile.TarFile('mytarfile.tar')
membername = [x for x in tar.getnames() if os.path.basename(x) == 'lutBeta.xml'][0]