Python处理XML转CSV:如何仅提取tct-id属性的部分内容
解决XML中tct-id属性的编号提取问题
嘿,作为Python新手能搞定XML转CSV已经超棒啦!针对你遇到的tct-id带版本号、没法匹配数据库纯编号的问题,我给你两个简单实用的解决方案:
方法一:字符串分割(格式固定时首选)
你的tct-id格式是编号;版本号;,直接用split(';')拆分后取第一个元素就好,简单粗暴还靠谱:
# 假设你已经从XML中拿到了tct_id的值 tct_id = "D-TW-0010054;3;" clean_document_id = tct_id.split(';')[0] print(clean_document_id) # 输出: D-TW-0010054
只要你的tct-id始终遵循编号;版本号;的格式,这个方法完全够用,不需要额外依赖库。
方法二:正则表达式(格式可能变动时更灵活)
如果担心未来tct-id的格式有小变化(比如偶尔没有版本号分号),用正则表达式匹配编号部分会更稳妥:
import re tct_id = "D-TW-0010054;3;" # 匹配所有非分号的字符,直到遇到第一个分号 match_result = re.match(r'([^;]+)', tct_id) if match_result: clean_document_id = match_result.group(1) print(clean_document_id) # 输出: D-TW-0010054
这个正则[^;]+会匹配任意不是分号的字符,就算遇到tct-id="D-TW-0010054"这种没有版本号的情况,也能正确提取编号。
整合到你的XML转CSV代码里
假设你用xml.etree.ElementTree处理XML,大概可以这样修改现有代码:
import xml.etree.ElementTree as ET import csv # 解析XML文件 tree = ET.parse('your_input.xml') root = tree.getroot() # 写入CSV with open('output.csv', 'w', newline='', encoding='utf-8') as csv_file: fieldnames = ['DocumentID'] writer = csv.DictWriter(csv_file, fieldnames=fieldnames) writer.writeheader() # 遍历所有带tct-id属性的元素 for element in root.findall('.//*[@tct-id]'): raw_tct_id = element.get('tct-id') # 这里用你选的方法处理编号 clean_id = raw_tct_id.split(';')[0] writer.writerow({'DocumentID': clean_id})
这样处理后,CSV里的DocumentID就和数据库的纯编号格式完全一致啦,后续做diff validation就没问题了!
内容的提问来源于stack exchange,提问作者Jack Edwards
相关产品推荐
相关产品推荐

