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

如何在Python中逐行读取XML文件并修改指定ID标签格式

用Python逐行修改XML中的标签为带属性的标签

问题

现有如下结构的XML文件:

<database>
    <name>Test</name>
    <description>A test dataset</description>
    <enrtry_count>10289</enrtry_count>
    <keywords>some keyword</keywords>
    <url>url.com</url>
    <entries>
    
        <id>muKO</id>
            <name>B6.129S2-Ighm<tm1Cgn>/CgnOrl</name>
            <description>description here</description>
            <date>2022-09-25 21:02:12</date>
            <repository>rep name</repository>
            <full_dataset_link>link_to_dataset.com</full_dataset_link>
        </entry>
...
</database>

需要把所有形如<id>xxx</id>的行替换成<entry id="xxx">,想用Python逐行读取文件并完成修改。

解决方案

用逐行读取+正则匹配替换就能搞定,这种方式简单直接,适合结构规整(<id>标签不跨行)的XML文件。具体代码如下:

import re
import os

# 替换成你的实际文件路径
input_path = "your_xml_file.xml"
temp_path = "temp_modified.xml"

# 正则匹配<id>标签行,捕获id内容,同时保留缩进
id_pattern = re.compile(r'^(\s*)<id>(.*?)</id>\s*$')

# 用临时文件处理,避免原文件损坏
with open(input_path, 'r', encoding='utf-8') as in_file, open(temp_path, 'w', encoding='utf-8') as out_file:
    for line in in_file:
        match_result = id_pattern.match(line)
        if match_result:
            # 提取原缩进和id值,构造新行
            indent = match_result.group(1)
            id_val = match_result.group(2)
            modified_line = f"{indent}<entry id=\"{id_val}\">\n"
            out_file.write(modified_line)
        else:
            # 不匹配的行直接写入
            out_file.write(line)

# 可选:用修改后的临时文件替换原文件
os.replace(temp_path, input_path)

注意事项

  • 这个方法只适用于<id>标签单独占一行的情况,如果你的XML里<id>内容跨行了,别用正则,直接用Python的xml.etree.ElementTree或者lxml这类专业XML解析库,避免正则处理XML的各种坑。
  • 用临时文件处理是为了防止修改过程中程序崩溃导致原文件损坏,确认修改没问题后再替换原文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:07:45