使用 python 在主文件夹中的文件夹中解压缩 gz 文件

Unzip gz files within folders in a main folder using python

我有多个文件夹中的 .gz 压缩文件,这些文件都位于一个名为 "usa" 的主文件夹中。我能够使用下面的代码提取单个文件。

import gzip
import shutil
source=r"C:\usauc300.dbf.gz"
output=r"C:\usauc300.dbf"
with gzip.open(source,"rb") as f_in, open(output,"wb") as f_out:
    shutil.copyfileobj(f_in, f_out)

我搜索了高低但找不到与命令行选项 gzip -dr..... 等效的选项,这意味着 "decompress recursive" 并且将遍历每个文件夹并将内容提取到同一位置同时删除原始压缩文件。有谁知道我如何使用 python 循环浏览文件夹中的文件夹,找到任何压缩文件并将它们解压缩到同一位置,同时用压缩文件替换解压缩文件?

我认为这是因为 gzip 从不对目录进行操作,它作为一种压缩算法与我们可以压缩目录的 zip 和 tar 不同。 python的gzip实现是对文件进行操作。然而,如果我们看一下 os.walk 调用,目录树的递归遍历就很容易了。

(我没测试过)

def gunzip(file_path,output_path):
    with gzip.open(file_path,"rb") as f_in, open(output_path,"wb") as f_out:
        shutil.copyfileobj(f_in, f_out)

def recurse_and_gunzip(root):
    walker = os.walk(root)
    for root,dirs,files in walker:
        for f in files:
            if fnmatch.fnmatch(f,"*.gz"):
                gunzip(f,f.replace(".gz",""))

这听起来像是 shutil.unpack_archive 的工作。

例如:

import shutil

shutil.unpack_archive(
    filename='path/to/archive.tar.gz', extract_dir='where/to/extract/to'
)