在Python中提取嵌套的gz文件
我有一个.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)