Python:从tar.gz中提取具有模式的特定文件,而无需提取完整文件

AST

我想*_sl_H*从许多tar.gz文件中提取所有具有模式的文件,而不从存档中提取所有文件。

我找到了以下几行,但无法使用通配符(https://pymotw.com/2/tarfile/):

import tarfile
import os

os.mkdir('outdir')
t = tarfile.open('example.tar', 'r')
t.extractall('outdir', members=[t.getmember('README.txt')])
print os.listdir('outdir')

有人有主意吗?提前谢谢了。

马丁·埃文斯

您可以从许多tar中提取与您的模式匹配的所有文件,如下所示:

  1. 使用glob让你所有的列表*.tar或者*.gz给定文件夹的文件。

  2. 对于每个tar文件,使用getmembers()函数获取每个tar文件中的文件列表

  3. 使用正则表达式(或简单if "xxx" in测试)过滤所需的文件。

  4. 将此匹配文件列表传递给函数中members参数extractall()

  5. 添加了异常处理以捕获编码错误的tar文件。

例如:

import tarfile
import glob
import re

reT = re.compile(r'.*?_sl_H.*?')

for tar_filename in glob.glob(r'\my_source_folder\*.tar'):
    try:
        t = tarfile.open(tar_filename, 'r')
    except IOError as e:
        print(e)
    else:
        t.extractall('outdir', members=[m for m in t.getmembers() if reT.search(m.name)])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章