我想提取.tgz文件并提取任何具有.tgz和.tar文件的子目录

时间:2011-05-19 12:45:06

标签: python gzip tar compression

我正在使用以下代码提取.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 个答案:

答案 0 :(得分:12)

这应该会给你想要的结果:

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所说,这称为递归。