我想解压.tgz文件,并提取包含.tgz和.tar文件的子目录

11 投票
1 回答
31531 浏览
提问于 2025-04-16 17:57

我正在使用下面的代码来解压 .tgz 文件。我需要解压的日志文件(.tgz)里面有子目录,这些子目录里还有其他的 .tgz 文件和 .tar 文件。我也想把这些文件一起解压。

最终,我想在所有可能出现在 .tgz 文件中的 .log 文件和 .txt 文件里搜索特定的字符串。

下面是我用来解压 .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 个回答

13

这段代码应该能给你想要的结果:

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所说,这个过程叫做递归。

撰写回答