使用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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Python解包知识点总结

    关于Python解包知识点总结

    在本篇文章里小编给各位分享的是关于Python解包知识点总结,有兴趣的朋友们可以学习参考下。
    2020-05-05
  • Python极值整数的边界探讨分析

    Python极值整数的边界探讨分析

    这篇文章主要介绍了Python极值整数的边界探讨分析,阅读本文来一起领略Python中的极值,看一下Python整数是否有边界,有需要的朋友可以借鉴参考下
    2021-09-09
  • 微信公众号接入ChatGPT机器人的方法

    微信公众号接入ChatGPT机器人的方法

    这篇文章主要介绍了微信公众号接入ChatGPT机器人的方法,不难,总共可以分为两步,一是在云服务器上部署自定义消息处理服务,二是微信公众号配置自己的消息处理服务器,本文给大家讲解的非常详细,需要的朋友可以参考下
    2023-02-02
  • Python对列表的操作知识点详解

    Python对列表的操作知识点详解

    在本篇文章里小编给大家整理了关于Python对列表的操作知识点总结以及实例代码运用,需要的朋友们跟着学习下。
    2019-08-08
  • Python趣味实例,实现一个简单的抽奖刮刮卡

    Python趣味实例,实现一个简单的抽奖刮刮卡

    这篇文章主要介绍了Python如何实现一个简单的抽奖刮刮卡,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • python安装pywin32clipboard的操作方法

    python安装pywin32clipboard的操作方法

    今天小编就为大家分享一篇python安装pywin32clipboard的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Pytorch实现神经网络的分类方式

    Pytorch实现神经网络的分类方式

    今天小编就为大家分享一篇Pytorch实现神经网络的分类方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python pandas 的索引方式 data.loc[],data[][]示例详解

    Python pandas 的索引方式 data.loc[],data[][]示例详解

    这篇文章主要介绍了Python pandas 的索引方式 data.loc[], data[][]的相关资料,其中data.loc[index,column]使用.loc[ ]第一个参数是行索引,第二个参数是列索引,本文结合实例代码讲解的非常详细,需要的朋友可以参考下
    2023-02-02
  • Python numpy大矩阵运算内存不足如何解决

    Python numpy大矩阵运算内存不足如何解决

    这篇文章主要介绍了Python numpy大矩阵运算内存不足如何解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Python+Opencv识别两张相似图片

    Python+Opencv识别两张相似图片

    python的功能实在太强大,这篇文章主要介绍了Python+Opencv识别两张相似图片的相关资料,文中利用Opencv库进行了更简洁化的实现,感兴趣的小伙伴们可以参考一下
    2016-04-04

最新评论