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

news2025/1/19 8:09:21

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.AllocatedRange

data = ""
# 遍历已使用的区域
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.AllocatedRange

data = ""
# 遍历已使用的区域
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].Value
        data += 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.coloradmin.cn/o/1518643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qt5-入门-QTableWidget简单使用

参考&#xff1a; C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt5.12 目录 效果代码头文件源文件可能遇到的问题只显示表头不显示内容 效果 填充一个列表&#xff0c;在列表中点击“颜色”一列&#xff0c;可…

面试经典150题——随机链表的复制

​前两天断更了两天有点事情&#x1f917; 1. 题目描述 2. 题目分析与解析 2.1 思路一 开始还是没什么思路&#xff0c;没思路那就先把题目解决不管方法的好坏。如果不考虑复杂度&#xff0c;该怎么解决&#xff1f; 可以有这样的一种思路&#xff1a; 首先复制链表的所有节…

springboot271制造装备物联及生产管理ERP系统

制造装备物联及生产管理ERP系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装制造装备物联及…

C语言例:表达式(a=2,3),a+1的值

题目&#xff1a;设int a; 则表达式(a2,3),a1的值 #include<stdio.h> int main(void) {int a0;int b;int c;b (a2,4);c (a2,3),a1;printf("a1%d\n",a1); //a1 3;printf("a2,4的值为&#xff1a;%d\n",b); //a2,4的值为&…

【1】Python零基础起步

什么是编程(Programming) 编程是编定程序的中文简称&#xff0c;就是让计算机代码解决某个问题&#xff08;目的&#xff09;&#xff0c;对某个计算体系规定一定的运算方式&#xff0c;使计算体系按照该计算方式运行&#xff0c;并最终得到相应结果的过程&#xff08;手段&am…

Window11安装达梦数据库

由于现在流行国产化&#xff0c;很多公司的数据库产品都使用了国产数据库&#xff0c;所以&#xff0c;今天给大家讲解一下&#xff0c;达梦数据库的安装和试用&#xff0c;这样学完以后&#xff0c;就可以直接在公司里面用了。 首先&#xff0c;需要先注册账号&#xff0c;然…

#数据结构 线性表的顺序存储

目录 每日文案 一、线性表的定义 二、线性表的操作 顺序表的存储结构 顺序表的初始化操作 判断顺序表是否为空表 将顺序表置为空表 计算顺序表中的元素个数 取出顺序表中的对应位置元素 取出对应数值的位序 在对应位置插入元素 将对应位置的元素删除 将顺序表中的数据…

视觉系统对透明胶水的检测都有哪些方案?

透明胶水的检测在工业生产中是一个挑战&#xff0c;因为传统的基于RGB相机的视觉系统通常难以检测透明物体。然而&#xff0c;随着技术的发展&#xff0c;现在有多种方法可以有效地检测透明胶水。 1. 高光谱相机&#xff1a;高光谱相机可以提供不同于传统RGB相机的解决方案。例…

为什localhost被forbidden而127.0.0.1不被绊?

原因&#xff1a; 判段网关的时候判127.0.0.1&#xff0c;所以最好改localhost 其他参考&#xff1a; 【计算机网络】localhost不能访问&#xff0c;127.0.0.1可以访问&#xff1f;_ping localhost和ping 127.0.0.1-CSDN博客

【LeetCode每日一题】2312. 卖木头块(DFS记忆化搜索+动态规划)

文章目录 [2312. 卖木头块](https://leetcode.cn/problems/selling-pieces-of-wood/)思路1:用DFS进行记忆化搜索代码&#xff1a;思路2:动态规划代码&#xff1a; 2312. 卖木头块 思路1:用DFS进行记忆化搜索 1.要用DFS深度优先遍历每一种情况。在递归的同时&#xff0c;不断更…

了解什么是 Redis 的雪崩、穿透和击穿?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透?

目录 一、面试官心理分析 二、面试题剖析 1. 缓存雪崩 2. 缓存穿透 3. 缓存击穿 一、面试官心理分析 其实这是问到缓存必问的&#xff0c;因为缓存雪崩和穿透&#xff0c;是缓存最大的两个问题&#xff0c;要么不出现&#xff0c;一旦出现就是致命性的问题&#x…

WOA-GRU多输入时序预测 | 鲸鱼优化算法-门控循环单元神经网络 | Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&…

国产软件很流氓?这些良心之作,比你想象的更加强大

说到国产软件&#xff0c;大家可能首先会想到“流氓软件”、“捆绑安装”和“满屏广告”这些烦人的标签。直接上狠货&#xff0c;几款高质量软件&#xff0c;错过了&#xff0c;真可惜。 1、格式工厂 说起格式工厂&#xff0c;这款国产软件可谓是历史悠久&#xff0c;曾经陪伴…

AI程序员Devin会在6个方面影响人类程序员

讲动人的故事&#xff0c;写懂人的代码 初创公司Cognition最近所发布的世界上首个AI程序员Devin&#xff0c;让人类程序员百感交集。因为Devin能自动干下面的事情&#xff1a; 自己学习不熟悉的技术&#xff1b; 端到端地自己搭建和部署应用程序&#xff1b; 自己找出并修复…

YOLOv9实例分割教程|(二)验证教程

专栏地址&#xff1a;目前售价售价59.9&#xff0c;改进点30个 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 一、验证 打开分割验证文件&#xff0c;填入数据集配置文件、训练好的权重文件&…

【数据结构】二叉搜索树底层刨析

文章目录 1. 二叉搜索树的实现2. 二叉搜索树的应用3. 改造二叉搜索树为 KV 结构4. 二叉搜索树的性能分析 1. 二叉搜索树的实现 namespace key {template<class K>struct BSTreeNode{typedef BSTreeNode<K> Node;Node* _left;Node* _right;K _key;BSTreeNode(const…

基于ElasticSearch存储海量AIS数据:AIS数据索引机制篇

文章目录 引言I 预备知识1.1 索引结构1.2 AIS信息项II AIS数据索引2.1 AIS数据静态数据索引2.2 AIS数据动态信息索引2.3 引入静态信息的AIS数据轨迹信息索引引言 AIS数据信息根据其不同更新频率可分为静态和动态信息。索引结构设计包含了静态、动态和轨迹信息索引。同时,为了…

我记不住的那些命令-xxdod

背景&#xff1a; 这里记录一下具体的xxd和od命令参数和使用方法&#xff0c;我想我肯定是记不住这些参数的。 零、文件 我们这里有一个示例文件README.txt&#xff0c;内容如下图所示&#xff1a; 一、xxd(查看、编辑二进制文件) 1. 十六进制显示(默认) 我们发现上面的显…

【jQuery】一篇文章学会jQuery!

一、JavaScript与jQuery JavaScript&#xff08;简称JS&#xff09;是一种广泛应用的编程语言&#xff0c;主要用于网页开发。它是一种多才多艺、动态性强的语言&#xff0c;允许开发人员为网页应用添加交互性、操作文档对象模型&#xff08;DOM&#xff09;并创建丰富的用户体…

网络编程:TCP和UDP

一、通信模式 1.1 套接字socket 1.网络通信通过套接字进行数据传输 2.socket是一个函数&#xff0c;为通信创建一个端点&#xff0c;并返回该端点的文件描述符 3.套接字本身是一个文件描述符&#xff0c;对应的是一个特殊的文件&#xff0c;该文件描述符维护了两个缓冲区&a…