python将xml转csv需先用xml.etree.elementtree解析,提取字段时处理属性和嵌套,再用csv模块安全写入;复杂场景可选lxml或pandas辅助。

用 Python 将 XML 转成 CSV,核心是先解析 XML 结构,再按行提取字段写入 CSV。关键在于理解 XML 的嵌套层级和重复节点,避免漏数据或格式错乱。
用 xml.etree.ElementTree 解析基础 XML
Python 标准库 xml.etree.ElementTree 足够处理大多数扁平或中等复杂度的 XML。适合有明确根节点、重复子节点(如多条 <record></record>)的结构。
- 用
ET.parse()加载文件,或ET.fromstring()加载字符串 - 定位所有目标记录节点,例如
root.findall('item') - 对每个节点,用
.findtext('field_name')提取文本,支持默认值(如findtext('price', '0.0'))
处理带属性和嵌套的 XML
如果 XML 含属性(如 <product id="101"></product>)或深层嵌套(如 <address><city>Beijing</city></address>),需手动拼接路径或提取属性。
- 获取属性:
elem.get('id')或elem.attrib['id'] - 访问嵌套字段:
elem.find('address/city').text if elem.find('address/city') is not None else '' - 推荐先遍历一遍样本,确认字段是否存在,避免
AttributeError
用 csv 模块安全写入 CSV 文件
别用字符串拼接写 CSV,容易出引号、逗号、换行问题。直接用 csv.writer 或 csv.DictWriter。
立即学习“Python免费学习笔记(深入)”;
- 若字段固定且顺序明确,用
writer.writerow([val1, val2, ...]) - 若字段名来自 XML(如每个
<record></record>有<name></name><age></age>),建议构建字典后用DictWriter,自动处理转义 - 打开文件务必加
newline=''参数(Windows 下尤其重要),否则会多空行
遇到复杂 XML?考虑 lxml 或 pandas
当 XML 层级深、命名空间多、或需 XPath 精确定位时,lxml 更可靠;若数据已能转成列表字典,pandas.DataFrame.to_csv() 可一键导出,自带编码和缺失值处理。
-
pip install lxml后可用etree.XPath写类似//book/author/text()的表达式 - 用 pandas:先收集所有记录为
list[dict],再pd.DataFrame(data).to_csv('out.csv', index=False, encoding='utf-8-sig') - 注意:pandas 不原生解析 XML,仍需 ElementTree 或 lxml 做前置提取
不复杂但容易忽略细节:字段缺失时填空字符串而非 None,中文注意保存为 UTF-8 并加 BOM(用 encoding='utf-8-sig'),重复标签要统一提取逻辑。写完用 Excel 或记事本打开验证格式是否正常。










