You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python提取嵌套.gz文件中的XML数据?

批量提取嵌套压缩包中的XML文件

当然可以直接提取所有XML数据到新文件夹,以下是两种实用方案:

命令行方案(Linux/macOS)

适合熟悉终端操作的用户,无需额外安装工具:

  1. 创建用于存放XML的目标文件夹:
    mkdir -p extracted_xmls
    
  2. 创建临时目录并解压外层.gz(实际为tar.gz归档包)到临时目录:
    mkdir -p temp && tar -xzf maingzfile.gz -C temp
    
  3. 遍历所有内层.gz文件,解压其中的XML到目标文件夹:
    for subgz in temp/*.gz; do
        gzip -dc "$subgz" > "extracted_xmls/$(basename "$subgz" .gz).xml"
    done
    
  4. 清理临时目录:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:03:20