[英]Navigating a large tar.gz file in python without extracting it first
[英]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 中提取與您的模式匹配的所有文件,如下所示:
使用glob
獲取給定文件夾中所有*.tar
或*.gz
文件的列表。
對於每個 tar 文件,使用getmembers()
函數獲取每個 tar 文件中的文件列表。
使用正則表達式(或if "xxx" in
測試中使用簡單的if "xxx" in
)來過濾所需的文件。
將此匹配文件列表傳遞給extractall()
函數中的members
參數。
添加了異常處理以捕獲編碼錯誤的 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.