Python读取Excel工作表数据写入CSV、XML、文本

Excel工作簿是常用的表格格式,许多数据呈现、数据分析和数据汇报都是以Excel工作表的形式进行。然而,在实际的数据管理、分析或自动化流程构建过程中,我们常常需要将这些Excel中的数据迁移至更其他数据系统,或者以文本形式存储以便与其他程序进行交互。Python作为一种强大且灵活的编程语言,能够高效地实现这一目标。本文将演示如何运用Python编程语言,将Excel工作表中的丰富数据导入到CSV、XML或文本中,我们也可以使用文中的方法读取数据并写入到其他文件或数据系统中。

文章目录

    • 直接将Excel工作表转换为CSV
    • 读取Excel工作表数据保存到CSV
    • 将Excel工作簿转换为OpenXML
    • 读取Excel工作表数据写入XML
    • 读取Excel工作表数据保存为文本

本文所使用的方法需要用到Spire.XLS for Python,可从官网获取或通过PyPI:pip install Spire.XLS

示例Excel文件

Python读取Excel文件

直接将Excel工作表转换为CSV

使用此API,我们可以直接获取指定工作表并转换为CSV文件。以下是操作步骤:

  1. 导入所需模块。
  2. 创建 Workbook 类的对象 wb
  3. 使用 wb.LoadFromFile() 方法加载指定路径下的Excel文件。
  4. 获取指定索引位置处的工作表 ws
  5. 使用 Worksheet.SaveToFile(string fileName, string Separator, Encoding) 方法将工作表转换为CSV文件并保存。
  6. 释放资源。

代码示例

from spire.xls import *
from spire.xls.common import *# 创建 Workbook 对象
wb = Workbook()# 加载 Excel 文件
wb.LoadFromFile("示例.xlsx")# 获取工作表
ws = wb.Worksheets.get_Item(0)# 将工作表保存为 CSV 文件
ws.SaveToFile(f"output/{ws.Name}.csv", ",", Encoding.get_UTF8())
wb.Dispose()

提取结果

Python Excel工作表转CSV

读取Excel工作表数据保存到CSV

除了直接转换外,我们还可以直接读取指定单元格范围的数据,并写入CSV文件,来实现自定义的数据提取。以下是操作步骤:

  1. 导入所需模块。
  2. 创建 Workbook 类的对象 wb
  3. 使用 wb.LoadFromFile() 方法加载指定路径下的Excel文件。
  4. 获取指定索引位置处的工作表 ws
  5. 确定工作表的已使用范围(即有数据的部分)作为 usedRange
  6. 遍历 usedRange 中的每一行和每一列:
    • 获取单元格的值,并对包含逗号的字符串单元格值添加双引号。
    • 将处理过的单元格值添加到 rowData 列表中。
  7. 对每一行的 rowData 列表进行处理,将其转换为逗号分隔的字符串,并在末尾添加换行符,然后将结果追加到 data 字符串中。
  8. 打开一个CSV文件(以当前工作表名称命名),以写模式和UTF-8编码将 data 字符串内容写入该文件。
  9. 使用 wb.Dispose() 方法释放资源,清理内存。

代码示例

from spire.xls import *
from spire.xls.common import *# 创建 Workbook 对象
wb = Workbook()# 加载 Excel 文件
wb.LoadFromFile("示例.xlsx")# 获取工作表
ws = wb.Worksheets.get_Item(0)# 获取已使用的区域
usedRange = ws.AllocatedRangedata = ""
# 遍历已使用的区域
for i in range(1, usedRange.Rows.Count):rowData = []for j in range(len(usedRange.Rows.get_Item(i).Columns)):# 获取单元格的值cellValue = usedRange[i + 1, j + 1].Value# 对包含逗号的数据添加引号if isinstance(cellValue, str) and ',' in cellValue:cellValue = f'"{cellValue}"'rowData.append(cellValue)data += ','.join(rowData) + '\n'# 将数据写入 CSV 文件
with open(f"output/CSV/{ws.Name}.csv", "w", encoding='utf-8') as f:f.write(data)
wb.Dispose()

提取效果

Python读取Excel工作表写入CSV

将Excel工作簿转换为OpenXML

使用 Workbook 类的 SaveAsXml 方法可以直接将一个工作簿转换为Open XML文件。以下是操作步骤:

  1. 导入所需模块。
  2. 创建 Workbook 类的对象 wb
  3. 使用 wb.LoadFromFile() 方法加载指定路径下的Excel文件。
  4. 使用 Workbook.SaveAsXml() 方法将工作簿转换为Open XML文件并保存。
  5. 释放资源。

代码示例

from spire.xls import *
from spire.xls.common import *# 创建 Workbook 对象
wb = Workbook()# 加载 Excel 文件
wb.LoadFromFile("示例.xlsx")# 保存为 OpenXML 文件
wb.SaveAsXml("output/工作簿转OpenXML.xml")
wb.Dispose()

提取效果

Python Excel转换为Open XML

读取Excel工作表数据写入XML

除了将工作簿直接转换为Open XML文件外,我们还可以读取表格数据,制作自定义的XML文件。我们可以引入 xml.etree.ElementTree 来方便对XML的写入。以下是操作示例:

  1. 导入所需模块。
  2. 创建 Workbook 类的对象 wb
  3. 使用 wb.LoadFromFile() 方法加载指定路径下的Excel文件。
  4. 获取工作表 ws,其索引为0。
  5. 获取工作表中的已使用区域 usedRange
  6. 创建 XML 的根元素 root,命名为 “Worksheet”。
  7. 在 XML 根元素下创建子元素 “Name”,并将其文本内容设置为当前工作表的名称。
  8. 遍历已使用的区域(按行):
    • 对于每一行,创建一个 “Row” 子元素。
    • 再对该行的每个单元格进行遍历(按列):
      • 获取单元格的值。
      • 在 “Row” 元素下创建一个 “Cell” 子元素。
      • 在 “Cell” 元素下进一步创建一个 “Data” 子元素,将单元格值转换为字符串并设置为其文本内容。
  9. 将所有生成的 XML 元素构建成一个完整的 XML 树结构,存储在 xml_tree 变量中。
  10. 使用 xml_tree.write() 方法将 XML 数据写入名为 “工作表写入XML.xml” 的文件中,同时指定 UTF-8 编码和添加 XML 声明。
  11. 最后,调用 wb.Dispose() 方法释放资源,关闭并清理 Excel 工作簿对象。

代码示例

import xml.etree.ElementTree as ET
from spire.xls import *
from spire.xls.common import *# 创建 Workbook 对象
wb = Workbook()# 加载 Excel 文件
wb.LoadFromFile("示例.xlsx")# 获取工作表
ws = wb.Worksheets.get_Item(0)# 获取已使用的区域
usedRange = ws.AllocatedRange# 创建 XML 根元素
root = ET.Element("Worksheet")# 设置工作表名称
name_element = ET.SubElement(root, "Name")
name_element.text = ws.Name# 遍历已使用的区域
for i in range(1, usedRange.Rows.Count):row_element = ET.SubElement(root, "Row")for j in range(len(usedRange.Rows.get_Item(i).Columns)):# 获取单元格的值cellValue = usedRange[i + 1, j + 1].Value# 创建单元格元素cell_element = ET.SubElement(row_element, "Cell")# 创建数据元素data_element = ET.SubElement(cell_element, "Data")data_element.text = str(cellValue)# 创建 XML 文档
xml_tree = ET.ElementTree(root)
# 将数据写入 XML 文件
xml_tree.write("output/XML/工作表写入XML.xml", encoding="utf-8", xml_declaration=True)
wb.Dispose()

代码示例
Python读取Excel写入XML

读取Excel工作表数据保存为文本

我们还可以直接读取表格文件写入普通文本文件,用于其他用途。以下是操作步骤:

  1. 导入模块。
  2. 初始化一个新的 Workbook 实例 wb
  3. 使用 wb.LoadFromFile() 函数加载 Excel 文件。
  4. 选取第一个工作表(索引为0),赋值给变量 ws
  5. 获取该工作表的已使用区域,存放在变量 usedRange 中。
  6. 初始化一个空字符串 data,用于收集所有单元格的数据。
  7. 遍历已使用的行与列范围:
    • 对于每一行(从第二行开始计数,因为Excel索引从1开始):
      • 对于该行内的每一个单元格:
        • 获取单元格的值,并将其转换为字符串形式,追加到 data 后面。
        • 如果当前单元格不是本行的最后一个单元格,则在其后添加制表符 \t 分隔数据。
      • 完成一行的所有单元格之后,在 data 后面添加换行符 \n,以便在输出时区分不同行的数据。
  8. 使用 with open() 语句以“写入”模式打开一个新文件,文件名基于当前工作表的名称加上 .txt 扩展名,且路径设为 “output/” 目录下。
  9. 将之前拼接好的包含所有单元格数据的字符串 data 写入所创建的文本文件中。
  10. 关闭文件流,确保数据成功写入。
  11. 调用 wb.Dispose() 方法释放资源,关闭并清理 Excel 工作簿对象。

代码示例

from spire.xls import *
from spire.xls.common import *# 创建 Workbook 对象
wb = Workbook()# 加载 Excel 文件
wb.LoadFromFile("示例.xlsx")# 获取工作表
ws = wb.Worksheets.get_Item(0)# 获取已使用的区域
usedRange = ws.AllocatedRangedata = ""
# 遍历已使用的区域
for i in range(1, usedRange.Rows.Count):for j in range(len(usedRange.Rows.get_Item(i).Columns)):# 获取单元格的值cellValue = usedRange[i + 1, j + 1].Valuedata += str(cellValue)if j < len(usedRange.Rows.get_Item(i).Columns) - 1:data += "\t"data += "\n"# 将数据写入 CSV 文件
with open(f"output/{ws.Name}.txt", "w", encoding='utf-8') as f:f.write(data)
wb.Dispose()

提取结果

Python读取Excel工作表写入文本文件

以上内容演示了如何使用Python读取Excel数据并写入到CSV、XML和文本文件中。
更多Excel操作文章
申请免费License

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/542152.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】升级打怪之路 Day 24:回溯算法的解题框架

今日题目&#xff1a; 46. 全排列51. N 皇后78. 子集 目录 LC 46. 全排列LC 51. N 皇后LC 78. 子集 【classic】1&#xff09;思路一2&#xff09;思路二 今天学习了回溯算法的解题框架&#xff1a;回溯算法解题套路框架 | labuladong 回溯算法的整体框架都是&#xff1a; re…

day-20 跳跃游戏 II

思路&#xff1a;用一个数字来存储到对应索引i的最少跳跃次数&#xff0c;ans[j]Math.min(ans[j],ans[i]1) code: class Solution {public int jump(int[] nums) {int nnums.length;int ans[]new int[n];for(int i0;i<n;i){ans[i]Integer.MAX_VALUE;}ans[0]0;for(int i0;i…

ThingsBoard Edge 设备连接

文章目录 一、创建设备1.创建设备配置2.创建设备 二、上传遥测1.MQTTX 工具2.上传遥测 三、属性1.属性类型2.上传客户端属性3.下载共享属性4.订阅共享数据 四、设备告警1.配置告警规则2.清除报警规则3.测试3.1.设备告警3.1.清除告警 五、规则链1.规则管理2.Edge 查看规则链 Thi…

Centos strema 9 环境部署Glusterfs9

本文档只是创建复制卷&#xff0c;分布式卷&#xff0c;分布式复制卷&#xff0c;纠删卷 操作系统 内核 角色 Ip地址 说明 CentOS Stream 9 x86_64 5.14.0-427.el9.x86_64 客户端 client 192.168.80.119 挂载存储业务机器 CentOS Stream 9 x86_64 5.14.0-427.el9.x8…

突破编程_前端_ACE编辑器(概述)

1 ACE 框架简介 ACE 框架是一个强大且灵活的前端文本编辑器框架&#xff0c;它提供了一套全面的 API 和丰富的功能&#xff0c;使得开发者能够轻松地在 Web 应用中集成功能强大的代码编辑器。ACE 编辑器不仅适用于在线代码编辑&#xff0c;还广泛应用于文档编辑、实时协作、富…

【回归预测】基于SSA-RF(麻雀搜索算法优化随机森林)的回归预测 多输入单输出【Matlab代码#66】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. 随机森林RF算法2. 麻雀搜索算法3. 实验模型4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. 随机森林RF算法 …

ROS Kinetic通信编程:话题、服务、动作编程

文章目录 一、话题编程二、服务编程三、动作编程 接上篇&#xff0c;继续学习ROS通信编程基础 一、话题编程 步骤&#xff1a; 创建发布者 初始化ROS节点向ROS Master注册节点信息&#xff0c;包括发布的话题名和话题中的消息类型按照一定频率循环发布消息 创建订阅者 初始化…

vscode 运行 java 项目之解决“Build failed, do you want to continue”的问题

Visual Studio Code运行 java 起来似乎比 IDEA 更轻量、比 eclipse 更友好&#xff0c;是不可多得的现代编译法宝。 安装好官方推荐的 java 扩展包后&#xff0c;就可以运行 java 代码了。功能 比 code runner 强&#xff0c;支持 gradle、maven、普通java项目&#xff0c;运行…

点餐平台网站|基于springboot框架+ Mysql+Java+Tomcat的点餐平台网站设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 用户功能实现 系统功能设计 数据库E-R图设计 lunwen参…

最佳实践:Swagger 自动生成 Api 文档

自动生成 API 文档的好处不言而喻&#xff0c;它可以提供给你的团队或者外部协作者&#xff0c;方便 API 使用者准确地调用到你的 API。为了降低手动编写文档带来的错误&#xff0c;很多 API 开发者会偏向于寻找一些好的方法来自动生成 API 文档。本文将会介绍一些常用的文档生…

神策分析 Copilot 成功通过网信办算法备案,数据分析 AI 化全面落地

近日&#xff0c;神策数据严格遵循《互联网信息服务深度合成管理规定》&#xff0c;已完成智能数据问答算法备案。该算法基于大模型技术&#xff0c;专注于为客户提供数据指标查询和数据洞察方面的专业回答。 神策分析 Copilot 运用神策数据智能数据问答算法&#xff0c;聚焦分…

NCP1380BDR2G芯片中文资料规格书PDF数据手册引脚图图片参数功能价格

产品描述&#xff1a; NCP1380 是一款高性能器件&#xff0c;旨在为准谐振转换器供电。该控制器基于专属的谷锁闭系统&#xff0c;可以在功率负载变轻时进行切换并降低开关频率。这样将产生稳定的运行&#xff0c;即使在漏极-源极谷中总是触发的开关事件下也是如此。此系统可在…