在Python中提取嵌套的gz文件

-1 投票
1 回答
39 浏览
提问于 2025-04-14 15:19

我有一个.gz文件,这个文件里面又包含了多个.gz文件,这些文件里存储着我想要提取的XML格式的数据。简单来说,它的结构大概是这样的:

maingzfile/subgzfile1/xmldata1
maingzfile/subgzfile2/xmldata2
maingzfile/subgzfile3/xmldata3
...

有没有办法可以把所有的XML数据直接提取到一个新文件夹里呢?

提前谢谢你们。

1 个回答

1

你可以用递归的方法来实现这个功能。这里的意思是,只要文件是一个 .gz 格式的压缩文件,就不断地解压它。你可以根据需要修改下面的这个函数,让它把解压后的文件放到其他地方。

import gzip
import shutil
import os

def extract_gz_recursively(gz_file: str):
    # remove .gz ending
    base_name = gz_file[:-3]

    # extract gz file
    with gzip.open(gz_file, 'rb') as file_in:
        with open(base_name, 'wb') as file_out:
            shutil.copyfileobj(file_in, file_out)
            print(base_name + ' file created.')
    
    # if it's still a gz file, recursively extract 
    if base_name.endswith(".gz"): extract_gz_recursively(base_name)


# get all gz archives from a directory
entries = os.scandir(PATH_GOES_HERE)
gz_files = [entry for entry in entries if entry.is_file() and entry.name.endswith(".gz")]

for gz_file in gz_files:
    extract_gz_recursively(gz_file.name)

撰写回答