使用Python实现将CSV转换为XML格式

 更新时间:2026年02月24日 08:16:25   作者:Eiceblue  
如果你需要快速实现 CSV 到 XML 的格式转换,本文将为大家详细介绍一下如何使用Free Spire.XLS for 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django使用unittest模块进行单元测试过程解析

    Django使用unittest模块进行单元测试过程解析

    这篇文章主要介绍了Django使用unittest模块进行单元测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 用1行Python代码识别身份证信息实例

    用1行Python代码识别身份证信息实例

    这篇文章主要介绍了用1行Python代码识别身份证信息实例的相关资料,需要的朋友可以参考下
    2023-01-01
  • pipreqs ./ --encoding=utf-8 --force 报错问题解决

    pipreqs ./ --encoding=utf-8 --force 报错问题解决

    本文主要介绍了pipreqs ./ --encoding=utf-8 --force 报错问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • PyQt5 控件字体样式等设置的实现

    PyQt5 控件字体样式等设置的实现

    这篇文章主要介绍了PyQt5 控件字体样式等设置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Python实现绘制自定义形状的词云示例

    Python实现绘制自定义形状的词云示例

    这篇文章主要介绍了Python实现绘制自定义形状的词云示例,通过将一段文本中出现频率高的单词按其出现频率大小以及颜色深浅排列成一个词云图形,从而更好地展示文本中的信息,需要的朋友可以参考下
    2022-10-10
  • Pyqt5中6种按钮的具体使用

    Pyqt5中6种按钮的具体使用

    本文主要介绍了Pyqt5中6种按钮的具体使用,包括QPushButton、QRadioButton、QCheckBox、QToolButton等,具有一定的参考价值,感兴趣的可以了解一下
    2025-09-09
  • Puppeteer使用示例详解

    Puppeteer使用示例详解

    这篇文章主要介绍了Puppeteer使用示例详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Python3指定路径寻找符合匹配模式文件

    Python3指定路径寻找符合匹配模式文件

    这篇文章主要介绍了Python3指定路径寻找符合匹配模式文件,涉及Python文件查找与模式匹配的相关技巧,需要的朋友可以参考下
    2015-05-05
  • Python+pandas数据分析实践总结

    Python+pandas数据分析实践总结

    这篇文章主要介绍了Python+pandas数据分析实践总结的相关资料,需要的朋友可以参考下
    2023-07-07
  • python如何通过正则匹配指定字符开头与结束提取中间内容

    python如何通过正则匹配指定字符开头与结束提取中间内容

    这篇文章主要介绍了python通过正则匹配指定字符开头与结束提取中间内容的操作方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02

最新评论