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

请求编写脚本:将CSV数据批量添加至指定格式XML文件

Python 脚本实现CSV数据批量导入XML的节点

针对你需要将CSV每行数据转为带属性的<entry>节点并插入已有XML的<login>节点的需求,以下是直接可用的Python脚本方案:

完整脚本

import csv
import xml.etree.ElementTree as ET
from xml.dom import minidom

# 配置文件路径
csv_file_path = "data.csv"
xml_file_path = "existing.xml"
output_xml_path = "updated.xml"

# 读取并验证CSV数据
csv_data = []
with open(csv_file_path, mode='r', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row_num, row in enumerate(csv_reader, start=2):  # 行号从2开始(表头是行1)
        required_fields = ['name', 'ip', 'timeout']
        if all(key in row and row[key].strip() for key in required_fields):
            csv_data.append({k: row[k].strip() for k in required_fields})
        else:
            print(f"警告:跳过第{row_num}行 - 缺少必填字段或字段为空")

# 解析目标XML文件
try:
    tree = ET.parse(xml_file_path)
    root = tree.getroot()
except FileNotFoundError:
    print(f"错误:未找到XML文件 {xml_file_path}")
    exit(1)
except ET.ParseError:
    print(f"错误:{xml_file_path} 不是有效的XML文件")
    exit(1)

# 定位<login>节点
login_node = root.find('login')
if login_node is None:
    print("错误:目标XML中未找到<login>节点")
    exit(1)

# 批量创建并添加<entry>节点
for data in csv_data:
    entry = ET.SubElement(login_node, 'entry')
    entry.set('name', data['name'])
    entry.set('ip', data['ip'])
    entry.set('timeout', data['timeout'])

# 格式化XML输出(保持可读性)
def prettify_xml(elem):
    rough_string = ET.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    return reparsed.toprettyxml(indent="  ")

# 写入结果文件
with open(output_xml_path, 'w', encoding='utf-8') as output_file:
    output_file.write(prettify_xml(root))

print(f"处理完成!更新后的XML已保存至 {output_xml_path}")

关键说明

  1. CSV处理:

    • 使用csv.DictReader按表头读取数据,直接通过字段名获取对应值
    • 自动验证每行是否包含name、ip、timeout三个必填字段,跳过无效行并给出明确提示
  2. XML操作:

    • 解析现有XML文件,自动定位<login>节点,若节点不存在则终止运行并提示
    • 为每行有效CSV数据创建带属性的<entry>节点,直接追加到<login>节点下
  3. 输出优化:

    • 生成格式化后的XML文件,避免压缩成一行,便于人工查看和后续编辑
    • 不修改原XML文件,而是生成新的输出文件,保障原始数据安全

使用步骤

  1. 将你的CSV文件命名为data.csv,确保表头为name,ip,timeout
  2. 将待修改的XML文件命名为existing.xml,放在同一目录下
  3. 运行脚本,生成的updated.xml就是最终结果

注意事项

  • 字段名大小写敏感,确保CSV表头与脚本中定义的required_fields完全一致
  • 若XML包含命名空间,需要修改root.find('login')为带命名空间的查找(例如root.find('{http://example.com/ns}login'))
  • 大文件场景下,该脚本也能高效处理,无需担心性能问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:57:18