Python: Extract using tarfile but ignoring directories

左心房为你撑大大i 提交于 2019-12-06 18:51:52

问题


If I have a .tar file with a file '/path/to/file.txt', is there a way (in Python) to extract the file to a specified directory without recreating the directory '/path/to'?


回答1:


I meet this problem as well, and list the complete example based on ekhumoro's answer

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 



回答2:


The data attributes of a TarInfo object are writable. So just change the name to whatever you want and then extract it:

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)



回答3:


As per the tarfile module, you can do that easily. I haven't checked it out yet.

TarFile.extract(member, path="")

Documentation:

Extract a member from the archive to the current working directory, using its full name. Its file information is extracted as accurately as possible. member may be a filename or a TarInfo object. You can specify a different directory using path.

So you should be able to do

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

See the full documentation at : http://docs.python.org/library/tarfile.html




回答4:


You could use TarFile.extractfile(member) to extract a specific file.

It returns a filelike object (typical Python) which you can then use to write the contents to a file on any location you want.




回答5:


In case you want only certain kind of files (like .xml or .html), you can check the item.name.endswith('xml'). Just to match the previous examples:

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 


来源:https://stackoverflow.com/questions/8405843/python-extract-using-tarfile-but-ignoring-directories

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!