Python:使用tarfile提取但忽略目录

时间:2011-12-06 19:48:13

标签: python tar

如果我的.tar文件包含文件'/path/to/file.txt',是否有办法(在Python中)将文件解压缩到指定目录而不重新创建目录'/path/to'

5 个答案:

答案 0 :(得分:13)

我也遇到了这个问题,并根据ekhumoro的回答列出了完整的例子

import os, tarfile
output_dir = "."
tar = tarfile.open(tar_file)
for member in tar.getmembers():
  if member.isreg():  # skip if the TarInfo is not files
    member.name = os.path.basename(member.name) # remove the path by reset it
    tar.extract(member,output_dir) # extract 

答案 1 :(得分:9)

TarInfo对象的数据属性是可写的。所以只需将name更改为您想要的任何内容,然后将其解压缩:

import sys, os, tarfile

args = sys.argv[1:]
tar = tarfile.open(args[0])
member = tar.getmember(args[1])
member.name = os.path.basename(member.name)
path = args[2] if len(args) > 2 else ''
tar.extract(member, path)

答案 2 :(得分:2)

根据tarfile模块,您可以轻松完成。 我还没检查过。

TarFile.extract(member, path="")

文档:

使用其全名将成员从存档中提取到当前工作目录。其文件信息尽可能准确地提取。 member可以是文件名或TarInfo对象。您可以使用路径指定其他目录。

所以你应该能够做到

TarFile.extract(member, path=".")

请参阅完整文档:http://docs.python.org/library/tarfile.html

答案 3 :(得分:0)

您可以使用TarFile.extractfile(member)提取特定文件。

它返回一个类似文件的对象(典型的Python),然后您可以使用该对象将内容写入您想要的任何位置的文件。

答案 4 :(得分:0)

如果只需要某些类型的文件(如.xml或.html),则可以检查item.name.endswith('xml')。 只是为了匹配前面的示例:

import os, tarfile
tarfilename = <your_tar_file>
exitfolder = "." #your path

tar = tarfile.open(tar_file, 'r:gz') # open a .tar.gz file i.e.
for item in tar:
  if item.name.endswith('xml'):  # getting only xml extensions
    item.name = os.path.basename(item.name) # remove the path
    tar.extract(item,exitfolder) # extract