如果我的.tar文件包含文件'/path/to/file.txt'
,是否有办法(在Python中)将文件解压缩到指定目录而不重新创建目录'/path/to'
?
答案 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=".")
答案 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