如何用Python提取嵌套.gz文件中的XML数据?
批量提取嵌套压缩包中的XML文件
当然可以直接提取所有XML数据到新文件夹,以下是两种实用方案:
命令行方案(Linux/macOS)
适合熟悉终端操作的用户,无需额外安装工具:
- 创建用于存放XML的目标文件夹:
mkdir -p extracted_xmls - 创建临时目录并解压外层
.gz(实际为tar.gz归档包)到临时目录:mkdir -p temp && tar -xzf maingzfile.gz -C temp - 遍历所有内层
.gz文件,解压其中的XML到目标文件夹:for subgz in temp/*.gz; do gzip -dc "$subgz" > "extracted_xmls/$(basename "$subgz" .gz).xml" done - 清理临时目录:
rm -rf temp
注意:如果内层
.gz里的XML文件名不是和压缩包同名,可手动调整输出文件名,比如改为extracted_xmls/$(basename "$subgz" .gz)_data.xml
Python脚本方案(跨平台,Windows/Linux/macOS通用)
适合需要跨平台或自定义逻辑的场景,确保已安装Python:
import os import gzip import tarfile from pathlib import Path # 配置路径(根据实际情况修改) main_targz_path = "maingzfile.gz" output_dir = "extracted_xmls" # 创建输出目录(不存在则自动创建) Path(output_dir).mkdir(parents=True, exist_ok=True) # 处理外层tar.gz归档 with tarfile.open(main_targz_path, 'r:gz') as main_tar: # 遍历归档内的所有文件 for member in main_tar.getmembers(): # 筛选出内层的.gz文件 if member.name.endswith('.gz') and member.isfile(): sub_gz_stream = main_tar.extractfile(member) if sub_gz_stream: # 生成输出XML文件名 xml_filename = f"{Path(member.name).stem}.xml" xml_output_path = os.path.join(output_dir, xml_filename) # 解压内层.gz并保存XML文件 with gzip.open(sub_gz_stream, 'rb') as sub_gz_in, open(xml_output_path, 'wb') as xml_out: xml_out.write(sub_gz_in.read()) print(f"已提取: {xml_output_path}")
将上述代码保存为extract_xml.py,在终端运行python extract_xml.py即可。
内容的提问来源于stack exchange,提问作者AWDn0n
相关产品推荐
相关产品推荐

