如何在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
相关产品推荐
相关产品推荐

