Я хочу извлечь файл .tgz и извлечь все подкаталоги с файлами .tgz и .tar
Я использую приведенный ниже код для извлечения файлов .tgz
. Тип файлов журнала (.tgz
), которые мне нужно извлечь, содержит подкаталоги, в которых есть другие файлы .tgz
и .tar
. Я тоже хочу их извлечь.
В конечном счете, я пытаюсь найти определенные строки во всех файлах .log
и .txt
, которые могут отображаться в файле .tgz
.
Ниже приведен код, который я использую для извлечения файла .tgz
. Я пытался выяснить, как извлечь подфайлы (.tgz
и .tar
). Пока что я не увенчался успехом.
import os, sys, tarfile
try:
tar = tarfile.open(sys.argv[1] + '.tgz', 'r:gz')
for item in tar:
tar.extract(item)
print 'Done.'
except:
name = os.path.basename(sys.argv[0])
print name[:name.rfind('.')], '<filename>'
Ответы
Ответ 1
Это даст вам желаемый результат:
import os, sys, tarfile
def extract(tar_url, extract_path='.'):
print tar_url
tar = tarfile.open(tar_url, 'r')
for item in tar:
tar.extract(item, extract_path)
if item.name.find(".tgz") != -1 or item.name.find(".tar") != -1:
extract(item.name, "./" + item.name[:item.name.rfind('/')])
try:
extract(sys.argv[1] + '.tgz')
print 'Done.'
except:
name = os.path.basename(sys.argv[0])
print name[:name.rfind('.')], '<filename>'
Как говорит @cularis, это называется рекурсией.