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

能否使用Python基于带间隔编号的CSV文件编辑XML文件?

从XML中筛选CSV指定编号的项目内容

我来帮你搞定这个需求!看起来你是想从那份包含连续编号的XML文件里,精准提取出CSV列表里那些带间隔的编号对应的项目描述对吧?下面我给你用Python写个实用的脚本,不需要额外装库,直接用标准模块就能搞定。

步骤说明

  • 先把CSV里的目标编号全部读出来,存在一个集合里(集合查找比列表快很多,适合批量匹配)
  • 解析XML文件,逐个检查每个<item>节点的<unitd>编号是否在目标集合里
  • 把匹配到的内容要么保存成新的XML,要么导出成CSV,看你需求

代码实现

import csv
import xml.etree.ElementTree as ET

# ---------------------- 配置文件路径 ----------------------
CSV_FILE_PATH = "your_target_ids.csv"
XML_FILE_PATH = "your_source_data.xml"
OUTPUT_XML_PATH = "matched_items.xml"
OUTPUT_CSV_PATH = "matched_items.csv"
# --------------------------------------------------------

# 读取CSV中的目标编号,处理每行单个或多个空格分隔的情况
target_ids = set()
with open(CSV_FILE_PATH, 'r', encoding='utf-8') as csv_file:
    csv_reader = csv.reader(csv_file)
    for row in csv_reader:
        # 把整行内容拼接成字符串再按空格分割,去掉空字符串
        ids_in_row = [id_str.strip() for id_str in ' '.join(row).split() if id_str.strip()]
        target_ids.update(ids_in_row)

# 解析XML并筛选匹配的项目
tree = ET.parse(XML_FILE_PATH)
root = tree.getroot()
matched_items = []

for item_node in root.findall('item'):
    unitd_node = item_node.find('unitd')
    # 确保节点存在且有文本内容
    if unitd_node is not None and unitd_node.text is not None:
        current_id = unitd_node.text.strip()
        if current_id in target_ids:
            matched_items.append(item_node)

# 保存匹配结果为新XML
new_root = ET.Element('root')
for item in matched_items:
    new_root.append(item)

ET.ElementTree(new_root).write(
    OUTPUT_XML_PATH,
    encoding='utf-8',
    xml_declaration=True,
    method='xml'
)

# 也可以导出成CSV格式(方便查看和编辑)
with open(OUTPUT_CSV_PATH, 'w', newline='', encoding='utf-8') as csv_out:
    writer = csv.writer(csv_out)
    writer.writerow(['编号', '项目描述'])  # 表头可以自定义
    for item in matched_items:
        unitd = item.find('unitd').text.strip()
        unittitle = item.find('unittitle').text.strip() if item.find('unittitle').text else '无描述'
        writer.writerow([unitd, unittitle])

print(f"处理完成!匹配到{len(matched_items)}个项目,已保存到{OUTPUT_XML_PATH}和{OUTPUT_CSV_PATH}")

使用注意事项

  • 把代码里的文件路径改成你自己的实际路径
  • 如果CSV里是每行一个编号,代码也能正常处理;如果是一行多个用空格分隔,同样没问题
  • 脚本会同时生成XML和CSV两种格式的结果,你可以根据需要删除其中一种输出逻辑
  • 如果XML里的<unitd>或<unittitle>节点可能不存在,代码里已经做了判断,避免报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:45:09