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

如何使用Python将多个XML文件转换为CSV?附示例XML

把多个XML文件转换为CSV的Python实现

没问题,我来帮你搞定这个XML转CSV的需求!先看你的示例XML结构,里面包含了文本节点(比如<Task>、<comments>)和带属性的节点(<author>),我们需要把这些内容都映射到CSV的列里。下面给你两种实用的方案:

方案一:使用Python标准库(无额外依赖)

这个方案用xml.etree.ElementTree解析XML,csv模块写入文件,不需要安装任何第三方包,适合环境受限的场景。

代码实现

import xml.etree.ElementTree as ET
import csv
from pathlib import Path

def parse_xml(xml_path):
    """解析单个XML文件,返回结构化数据"""
    tree = ET.parse(xml_path)
    root = tree.getroot()
    
    # 提取各个字段,兼容节点不存在的情况
    task = root.find('Task').text.strip() if root.find('Task') is not None else ""
    author_node = root.find('author')
    author_test = author_node.get('Test') if author_node is not None else ""
    author_lang = author_node.get('lang') if author_node is not None else ""
    author_type = author_node.get('type') if author_node is not None else ""
    comments = root.find('comments').text.strip() if root.find('comments') is not None else ""
    
    return {
        "Task": task,
        "author_Test": author_test,
        "author_lang": author_lang,
        "author_type": author_type,
        "comments": comments
    }

def xmls_to_csv(xml_dir, output_csv):
    """批量处理指定目录下的XML文件,写入CSV"""
    # 获取目录下所有XML文件
    xml_files = list(Path(xml_dir).glob("*.xml"))
    if not xml_files:
        print("没有找到任何XML文件!")
        return
    
    # 准备CSV表头(和parse_xml返回的键对应)
    headers = ["Task", "author_Test", "author_lang", "author_type", "comments"]
    
    # 写入CSV
    with open(output_csv, 'w', newline='', encoding='utf-8') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=headers)
        writer.writeheader()
        
        for xml_file in xml_files:
            print(f"正在处理: {xml_file.name}")
            data = parse_xml(xml_file)
            writer.writerow(data)
    
    print(f"转换完成!结果已保存到: {output_csv}")

# 使用示例
if __name__ == "__main__":
    # 替换成你的XML文件所在目录
    XML_DIRECTORY = "./xml_files"
    # 替换成你想要输出的CSV路径
    OUTPUT_CSV = "./output.csv"
    xmls_to_csv(XML_DIRECTORY, OUTPUT_CSV)

代码说明

  • parse_xml函数:负责解析单个XML文件,提取我们需要的字段,同时处理节点可能不存在的情况,避免运行报错。
  • xmls_to_csv函数:批量遍历指定目录下的所有XML文件,调用解析函数收集数据,然后统一写入CSV。
  • Path.glob用来匹配所有.xml文件,比手动遍历目录更简洁可靠。

方案二:使用Pandas(代码更简洁)

如果你已经安装了pandas,这个方案会更省心,pandas.read_xml可以直接处理XML结构,然后一行代码就能转成CSV。

代码实现

import pandas as pd
from pathlib import Path

def xmls_to_csv_pandas(xml_dir, output_csv):
    """用Pandas批量转换XML到CSV"""
    xml_files = list(Path(xml_dir).glob("*.xml"))
    if not xml_files:
        print("没有找到任何XML文件!")
        return
    
    # 遍历所有XML文件,读取并合并成一个DataFrame
    df_list = []
    for xml_file in xml_files:
        print(f"正在处理: {xml_file.name}")
        # 读取XML,指定xpath定位数据节点,给属性加前缀避免列名冲突
        df = pd.read_xml(
            xml_file,
            xpath="./document",
            attrs_prefix="author_"
        )
        df_list.append(df)
    
    # 合并所有数据并写入CSV
    combined_df = pd.concat(df_list, ignore_index=True)
    combined_df.to_csv(output_csv, index=False, encoding='utf-8')
    print(f"转换完成!结果已保存到: {output_csv}")

# 使用示例
if __name__ == "__main__":
    XML_DIRECTORY = "./xml_files"
    OUTPUT_CSV = "./output_pandas.csv"
    xmls_to_csv_pandas(XML_DIRECTORY, OUTPUT_CSV)

代码说明

  • pd.read_xml的xpath参数指定读取<document>节点下的内容,精准定位我们需要的数据。
  • attrs_prefix参数会给<author>节点的属性自动添加前缀(比如Test变成author_Test),和方案一的列名保持一致,避免列名冲突。
  • 最后用pd.concat合并所有XML的数据,一次性写入CSV,代码量少且易维护。

注意事项

  • 如果你的XML文件结构和示例有差异,只需要修改解析部分的代码(比如新增节点提取、调整属性名称)即可适配。
  • 如果XML文件编码不是UTF-8,需要在解析时指定对应的编码(比如方案一中的ET.parse(xml_path, parser=ET.XMLParser(encoding='GBK')))。

内容的提问来源于stack exchange,提问作者Kum_R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:34:50