簡體   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