Python:从tarball中解压单个文件夹

Python:从tarball中解压单个文件夹,python,Python,给定一个包含多个目录的tarball,如何只提取一个特定的目录 import tarfile tar = tarfile.open("/path/to/tarfile.tar.gz") tar.list() 。。。rootdir/subdir_1/file_1.ext ... rootdir/subdir\u 1/file\n.ext ... rootdir/subdir_2/file_1.ext 等等 如何仅从subdir_2中提取文件 注意:整个操作都是在内存a中完成的 impor

给定一个包含多个目录的tarball,如何只提取一个特定的目录

import tarfile  
tar = tarfile.open("/path/to/tarfile.tar.gz")  
tar.list()
。。。rootdir/subdir_1/file_1.ext
... rootdir/subdir\u 1/file\n.ext
... rootdir/subdir_2/file_1.ext
等等

如何仅从subdir_2中提取文件

注意:整个操作都是在内存a中完成的

import tarfile, urllib2, StringIO  
data = urllib2.urlopen(url)  
tar = tarfile.open(mode = 'r|*', fileobj = StringIO.StringIO(data.read()))  

。。。因此,将所有内容提取到磁盘并移动必要的文件夹是不可行的。

您似乎就快到了-我认为您可以使用
getnames()
的内容并将其与相结合来处理内存中的文件,例如:

import re
files = (file for file in tar.getnames() if file.startswith('rootdir/'))

您建议如何保存
tarfile.extractfile()
返回的文件对象?我似乎找不到合适的方法;
pickle
/
cPickle
正确吗?或者有更好的方法吗?假设文件相对较小,您应该能够对提取的文件对象调用.read(),并将内容写入已在写入模式下打开的常规python文件对象。tarball.getnames()中的f的Ari-
如果f.startswith(package\u name):
打开(package\u name,'w')。写入(tarball.extractfile(f.read())
返回一个错误:
tarfile.StreamError:不允许向后搜索。
无论我尝试了多少种变体,我都会遇到这种情况。似乎我在尝试使用tarfile处理数据流时遇到了限制。明白了。最后使用ByteIO构造内存中的临时文件,以便来回搜索。看起来像
tarfile.getnames()
/
tarfile.getmembers()
由于
标题
/
数据
/
标题
/
数据
tarball的性质,因此可以读取整个文件。()感谢您的帮助。