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.rhkb.cn/news/278950.html

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

相关文章

B树B+树,字典树详解,哈夫曼树博弈树

目录 B树&#xff1a;B-Tree B树 字典树&#xff1a;Trie Tree 哈夫曼树 博弈树 B树&#xff1a;B-Tree 多路平衡搜索树 1.M阶B树&#xff0c;就是M叉&#xff08;M个指针&#xff09;。 2.每个节点内记录个数<M-1。 3.根节点记录个数>1。 4.其余节点内记录个数&…

洗涤杂质气体的仪器-PFA洗涤瓶

PFA洗气瓶是一种洗去气体中杂质的仪器&#xff0c;是将不纯气体通过选定的适宜液体介质鼓泡吸收&#xff08;溶解或由于发生化学反应&#xff09;&#xff0c;从而洗去杂质气体&#xff0c;以达净化气体的目的。在有可燃性气源的实验装置中&#xff0c;洗气瓶也可起到安全瓶的作…

qt使用Windows经典风格,以使QTreeView或QTreeWidge有节点线或加号

没有使用Windows经典风格的QTreeView或QTreeWidget显示如下&#xff1a; 使用Windows经典风格的QTreeView或QTreeWidget显示如下&#xff1a; 树展开时&#xff1a; 树未展开时&#xff1a; 可以看到&#xff1a; 未使用Windows经典风格时&#xff0c;QTreeView或QTreeWidget…

【Flask开发实战】防火墙配置文件解析(二)之shell读取内容

一、前言 上一篇文章中&#xff0c;介绍了防火墙配置文件包含的基本元素和格式样式&#xff0c;并模拟了几组有代表性的规则内容&#xff0c;作为基础测试数据。在拿到基础测试数据后&#xff0c;关于我们最终想解析成的数据是什么样式的&#xff0c;其实不难看出&#xff0c;…

聚合音乐网-播放器网站源码

源码简介 MKOnlineMusicPlayer 是一款全屏的音乐播放器 UI 框架&#xff08;为避免侵权&#xff0c;已移除所有后端功能&#xff09;。 前端界面参照 QQ 音乐网页版进行布局&#xff0c;同时采用了流行的响应式设计&#xff0c;无论是在PC端还是在手机端&#xff0c;均能给您…

【Linux】日常使用命令(三)

文章目录 **cal 命令****date 命令****bc 命令****Linux下玩小游戏**&#xff1a; cal 命令 功能描述: cal 命令用于显示日历。 常用选项: -3&#xff1a;显示前一个月、当前月和下一个月的日历。-y&#xff1a;显示整年的日历。 常用示例: # 示例 1: 显示当前月的日历 cal# …

Ubuntu Desktop 设置 gedit

Ubuntu Desktop 设置 gedit 1. View2. Editor3. Font & Colors4. keyboard shortcut5. Find and ReplaceReferences gedit (/ˈdʒɛdɪt/ or /ˈɡɛdɪt/) is the default text editor of the GNOME desktop environment and part of the GNOME Core Applications. Desig…

相比于 HTTP 协议,WebSocket协议的必要性体现在哪里?

HTTP 协议的一个缺点 从 HTTP 协议的角度来看&#xff0c;就是点一下网页上的某个按钮&#xff0c;前端发一次 HTTP请 求&#xff0c;网站返回一次 HTTP 响应。这种由客户端主动请求&#xff0c;服务器响应的方式也满足大部分网页的功能场景。但是有没有发现&#xff0c;在HTTP…

InfluxDB、Grafana、node_exporter、Prometheus搭建压测平台

InfluxDB、Grafana、node_exporter、Prometheus搭建压测平台 我们的压测平台的架构图如下&#xff1a; 配置docker环境 1&#xff09;yum 包更新到最新 sudo yum update如果有提示&#xff0c;直接输入y&#xff0c;回车。 2&#xff09;安装需要的软件包&#xff0c; yum-…

八大排序算法

排序算法 排序的概述排序的分类分为5大类&#xff1a;优点及缺点如何选择排序算法 八种排序之间的关系:一、插入排序直接插入排序动图详解代码实现 希尔排序动图详解代码实现 二、交换排序冒泡排序:动图详解代码实现 快速排序:动图详解代码实现 三、选择排序直接选择排序动图详…

杉德支付配合调查 - 数字藏品服务

最近&#xff0c;数字收藏品平台淘派发布了一则公告&#xff0c;宣布支付通道杉德已暂停接口服务&#xff0c;以配合调查。 近期发现多个异常账户&#xff0c;涉嫌盗取他人信息和银行卡&#xff0c;利用平台从事非法交易。淘派已第一时间报警&#xff0c;协助警方追回资金(回执…

java数据结构与算法刷题-----LeetCode1005. K 次取反后最大化的数组和(这就不是简单题)

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 卷来卷去&#xff0c;把简单题都卷成中等题了 文章目录 1. 排序后从小到大…

算法刷题Day14 | 二叉树理论、递归遍历、迭代遍历、统一迭代

目录 0 引言1 递归遍历1.1 前序遍历1.2 后序遍历1.3 中序遍历 2 迭代遍历2.1 前序和后序2.2 中序 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;算法刷题Day14 | 二叉树理论、递归遍历、迭代遍历、统一迭…

【教程】APP加固的那些小事情

摘要 APP加固是保护APP代码逻辑的重要手段&#xff0c;通过隐藏、混淆、加密等操作提高软件的逆向成本&#xff0c;降低被破解的几率&#xff0c;保障开发者和用户利益。本文将介绍APP加固常见失败原因及解决方法&#xff0c;以及处理安装出现问题的情况和资源文件加固策略选择…

html--蝴蝶

<!DOCTYPE html> <html lang"en" > <head> <meta charset"UTF-8"> <title>蝴蝶飞舞</title> <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.cs…

关于Transfomer的思考

为何诞生 在说transformer是什么&#xff0c;有什么优势之类的之前&#xff0c;先谈一谈它因何而诞生。transformer诞生最重要的原因是早先的语言模型&#xff0c;比如RNN&#xff0c;由于其本身的训练机制导致其并行度不高&#xff0c;特别是遇到一些长句子的情况下。其次&…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:ListItem)

用来展示列表具体item&#xff0c;必须配合List来使用。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。该组件的父组件只能是List或者ListItemGroup。 子组件 可以包含单个子组件。 接口 从API…

学习Python,需要知道的经典案例

文章目录 一、Python简介二、Python经典案例1. 猜数字游戏2. 文本文件处理3. 网络爬虫4. 数据可视化5. 电子邮件发送6. 实现一个简单的Web服务器。 三、Python处理IP相关知识点1. 处理IP地址2. 网络编程&#xff08;TCP/IP&#xff09;3. 使用第三方库处理IP信息 四、相关链接 …

Mysql与MyBatis

1 Sql语句 增删改查 1.1 建表 -- cmd展示数据库 show databases ; -- cmd登录数据库 mysql localhost -u root -p-- auto_increment 自动增长&#xff0c;每添加一个表项id自动增1 -- char定长字符串 0-255&#xff0c;不足十个字符按十个字符算&#xff0c; varchar变长字符串…

搭建项目后台系统基础架构

任务描述 1、了解搭建民航后端框架 2、使用IDEA创建基于SpringBoot、MyBatis、MySQL、Redis的Java项目 3、以原项目为参照搭建项目所涉及到的各个业务和底层服务 4、以原项目为例&#xff0c;具体介绍各个目录情况并参照创建相关文件夹 1、创建项目后端 BigData-KongGuan …