首页 > 解决方案 > 如何在保持目录结构的同时提取所有 .tar.gz 文件?

问题描述

我正在开发一个程序来解压缩/提取.tar.gz给定文件夹中的所有文件。该文件夹也可以有多个包含多个文件的子目录.tar.gz。我试图提取所有这些,同时保持文件夹结构,但遇到了一些问题。

我当前的代码如下,extractall()似乎只提取到当前工作目录,我不太清楚如何维护目录结构。

for zipped_file in pathlib.Path(path).glob('**/*.tar.gz'):
    tar = tarfile.open(zipped_file, 'r:gz')
    tar.extractall()
    tar.close()

标签: pythonpython-3.xziptar

解决方案


https://docs.python.org/3/library/tarfile.html

TarFile.extractall(path=".", members=None, *, numeric_owner=False)
    Extract all members from the archive to the current working directory or directory path.

所以:

import os

for path, directories, files in os.walk('/foo/bar'):
    for f in files:
        if f.endswith(".tar.gz"):
            tar = tarfile.open(os.path.join(path,f), 'r:gz')
            tar.extractall(path=path)
            tar.close()

推荐阅读