繁体   English   中英

Python:从 tar.gz 中提取带有模式的特定文件而不提取完整文件

[英]Python: Extracting specific files with pattern from tar.gz without extracting the complete file

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

我找到了这些行,但无法使用通配符 ( 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')

有人有想法吗? 提前谢谢了。

看一看TarFile.getmembers()方法,它以列表的形式返回档案的成员。 获得此列表后,您可以根据条件决定要提取哪个文件。

import tarfile
import os

os.mkdir('outdir')
t = tarfile.open('example.tar', 'r')
for member in t.getmembers():
    if "_sl_H" in member.name:
        t.extract(member, "outdir")

print os.listdir('outdir')

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

  1. 使用glob获取给定文件夹中所有*.tar*.gz文件的列表。

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

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

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

  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)])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM