使用Python实现将CSV转换为XML格式
在数据处理场景中,CSV 以轻量、易编辑的特点成为日常数据交换的常用格式,但 XML 凭借结构化、可扩展的优势,在企业级系统集成、跨平台数据交互中更具优势。
如果你需要快速实现 CSV 到 XML 的格式转换,Free Spire.XLS for Python 是一个高效且免费的选择 — 它无需依赖 Microsoft Office,能轻松解析 CSV 文件并辅助完成 XML 结构化输出。本文将介绍如何使用该库实现 CSV 转 XML 格式。
一、核心优势与应用场景
1. 免费 Python 库核心亮点
- 免费无水印:使用无需授权,无功能水印 ;
- 轻量化:仅需Python环境,无需安装大型办公软件;
- 双模式转换:支持手动构建自定义XML结构,也支持原生
SaveAsXml()导出Open XML; - 高兼容性:支持读取各种编码、格式的CSV文件,输出标准XML格式;
- 易上手:API设计简洁,新手也能快速掌握核心操作。
2. 适用场景
- 企业系统对接:将业务系统导出的CSV报表转换为XML格式供上游系统调用;
- 数据标准化:统一多源CSV数据的输出格式,适配XML接口规范;
- 自动化处理:集成到Python脚本中,实现CSV转XML的批量/定时处理;
- 办公系统兼容:生成的Open XML可直接被Excel等办公软件识别。
二、CSV 转 XML 的两种方式
安装 Python 库
可通过 pip命令一键安装:
pip install Spire.XLS.Free
准备测试 CSV 文件
先创建一个示例CSV文件(命名为data.csv),内容如下(模拟用户信息):
姓名,年龄,城市,职业 张三,28,北京,工程师 李四,32,上海,产品经理 王五,25,广州,设计师
方式1:手动构建自定义结构 XML(灵活适配业务)
该方式可自定义XML节点名称、层级,适配各类业务系统的XML接口规范,是最常用的灵活方案。
from spire.xls import *
from spire.xls.common import *
import xml.etree.ElementTree as ET
from xml.dom import minidom
def csv_to_custom_xml(csv_path, xml_path):
"""
手动构建自定义结构的XML(灵活适配业务需求)
:param csv_path: 输入CSV文件路径
:param xml_path: 输出XML文件路径
"""
try:
# 1. 初始化Workbook对象,加载CSV文件
workbook = Workbook()
# 设置加载CSV的编码(根据实际情况调整,如gbk、utf-8)
workbook.LoadFromFile(csv_path, ",", 1, 1)
# 2. 获取第一个工作表(CSV加载后默认在第一个Sheet)
worksheet = workbook.Worksheets[0]
# 3. 获取CSV的总行数和总列数(排除空行)
row_count = worksheet.LastRow
col_count = worksheet.LastColumn
# 4. 构建XML根节点
root = ET.Element("DataRecords")
# 5. 遍历CSV数据(第一行为表头,从第二行开始是数据)
headers = []
for col in range(1, col_count + 1):
# 获取表头文本
header_text = worksheet.Range[1, col].Text
headers.append(header_text)
# 遍历数据行
for row in range(2, row_count + 1):
# 创建子节点(每个数据行对应一个Record节点)
record = ET.SubElement(root, "Record")
# 遍历当前行的列
for col in range(1, col_count + 1):
# 获取单元格值
cell_value = worksheet.Range[row, col].Text
# 创建列节点,节点名=表头,节点值=单元格内容
field = ET.SubElement(record, headers[col - 1])
field.text = cell_value
# 6. 保存XML文件
tree = ET.ElementTree(root)
tree.write(custom_xml_file, encoding="utf-8", xml_declaration=True)
print(f"自定义XML转换成功!文件已保存至:{xml_path}")
except Exception as e:
print(f"转换失败:{str(e)}")
finally:
# 释放Workbook资源
workbook.Dispose()
# 调用自定义XML转换函数
if __name__ == "__main__":
csv_file = "data.csv"
custom_xml_file = "custom_data.xml"
csv_to_custom_xml(csv_file, custom_xml_file)
方式2:导出为 Open XML 格式(快速兼容办公系统)
Free Spire.XLS 提供原生 SaveAsXml() 方法,可直接将加载的 CSV 文件导出为符合Open XML Spreadsheet 规范的 XML 文件,该格式可直接被 Excel、WPS 等办公软件识别,无需手动构建节点,适合快速导出场景。
from spire.xls import *
from spire.xls.common import *
def csv_to_open_xml(csv_path, xml_path):
"""
导出Open XML格式(兼容Excel等办公软件)
:param csv_path: 输入CSV文件路径
:param xml_path: 输出Open XML文件路径
"""
try:
# 1. 初始化Workbook对象,加载CSV文件
workbook = Workbook()
# 设置CSV编码和分隔符
workbook.LoadFromFile(csv_path, ",", 1, 1)
# 2. 导出为Open XML格式
workbook.SaveAsXml(xml_path)
print(f"Open XML导出成功!文件已保存至:{xml_path}")
except Exception as e:
print(f"导出失败:{str(e)}")
finally:
# 释放Workbook资源
workbook.Dispose()
# 调用Open XML导出函数
if __name__ == "__main__":
csv_file = "data.csv"
open_xml_file = "open_data.xml"
csv_to_open_xml(csv_file, open_xml_file)
两种方式核心对比
| 转换方式 | 核心特点 | 适用场景 |
|---|---|---|
| 手动构建自定义 XML | 可自由定义节点名称、层级、属性,输出极简的业务 XML | 对接自定义 XML 接口、数据标准化、跨系统数据交互 |
| 导出Open XML | 一键导出,生成 Excel 兼容的 Open XML,无需手动构建节点 | 快速导出、办公系统兼容、无需自定义 XML 结构的场景 |
关键代码解释
| 代码段 | 功能说明 |
|---|---|
| workbook.LoadFromFile(...) | 加载CSV文件,指定分隔符; |
| workbook.SaveAsXml(xml_path) | 直接将 Workbook 对象导出为 Open XML 格式; |
| ET.Element/ET.SubElement | 手动构建 XML 节点结构,完全自定义 XML 层级和名称; |
| workbook.Dispose() | 释放 Workbook 占用的内存资源,避免内存泄漏。 |
运行结果说明
自定义 XML 结果(custom_data.xml):结构简洁,完全匹配业务定义,示例如下:

Open XML 结果(open_data.xml):符合Excel的Open XML规范,包含工作表、单元格、格式等完整元数据,可直接用Excel打开,核心片段如下:

通过本文的教程,你可以根据实际需求选择合适的转换方式,无论是适配业务接口的自定义 XML,还是兼容办公软件的 Open XML,都能轻松实现。如果需要扩展功能(如XML转CSV、Excel转XML),可参考官方文档进一步探索。
到此这篇关于使用Python实现将CSV转换为XML格式的文章就介绍到这了,更多相关Python CSV转XML内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Python pandas 的索引方式 data.loc[],data[][]示例详解
这篇文章主要介绍了Python pandas 的索引方式 data.loc[], data[][]的相关资料,其中data.loc[index,column]使用.loc[ ]第一个参数是行索引,第二个参数是列索引,本文结合实例代码讲解的非常详细,需要的朋友可以参考下2023-02-02


最新评论