[python3]Excel解析库-calamine,10倍openpyxl性能

`calamine` 是一个用于读取多种电子表格格式(如 Excel、LibreOffice Calc 等)的 Python 库。它支持 `.xls`, `.xlsx`, `.ods` 和 `.csv` 文件格式,提供了简单易用的 API 来加载和处理电子表格数据。`calamine` 的一大特点是它的轻量级和高效性,特别适合需要快速解析电子表格而不依赖于重量级库(如 `openpyxl` 或 `pandas`)的应用场景。

安装

要使用 `calamine`,首先需要通过 `pip` 安装它:

```bash
pip3 install calamine
```

基本用法

#### 读取 Excel 文件以下是如何使用 `calamine` 读取 Excel 文件并获取其中的数据:```python
from calamine import Workbook, CellType# 打开工作簿
workbook = Workbook.open("example.xlsx")# 获取所有的工作表名称
sheet_names = workbook.sheet_names()
print(f"Sheet names: {sheet_names}")# 选择第一个工作表
sheet = workbook.get_sheet_by_index(0)# 遍历所有行
for row in sheet.rows():# 每一行是一个列表,包含每个单元格的值print([cell.value for cell in row if cell.type != CellType.EMPTY])# 关闭工作簿
workbook.close()
```#### 读取 ODS 文件对于 OpenDocument Spreadsheet (ODS) 文件,操作方式类似:```python
from calamine import Workbook, CellType# 打开 ODS 工作簿
workbook = Workbook.open("example.ods")# 选择第一个工作表
sheet = workbook.get_sheet_by_index(0)# 遍历所有行
for row in sheet.rows():print([cell.value for cell in row if cell.type != CellType.EMPTY])# 关闭工作簿
workbook.close()
```#### 读取 CSV 文件虽然 CSV 文件不是严格意义上的电子表格文件,但 `calamine` 同样可以方便地处理它们:```python
from calamine import Workbook, CellType# 打开 CSV 文件
with open("example.csv", "r") as f:workbook = Workbook.from_csv(f)# 选择唯一的工作表sheet = workbook.get_sheet_by_index(0)# 遍历所有行for row in sheet.rows():print([cell.value for cell in row if cell.type != CellType.EMPTY])
```### 处理单元格类型`calamine` 支持多种单元格类型,并允许你根据需要访问不同类型的数据:```python
from calamine import CellType# 假设我们已经打开了一个工作簿并选择了某个工作表
for row in sheet.rows():for cell in row:if cell.type == CellType.STRING:print(f"String value: {cell.value}")elif cell.type == CellType.NUMBER:print(f"Number value: {cell.value}")elif cell.type == CellType.BOOL:print(f"Boolean value: {cell.value}")elif cell.type == CellType.ERROR:print(f"Error value: {cell.error}")elif cell.type == CellType.FORMULA:print(f"Formula: {cell.formula}, Result: {cell.value}")elif cell.type == CellType.EMPTY:print("Empty cell")
```### 获取特定单元格的值如果你知道具体的单元格位置(例如 A1),可以直接获取其值:```python
# 获取 A1 单元格的值
value = sheet.get_value("A1")
print(f"Value at A1: {value}")
```### 更多高级功能- **遍历列**:除了按行遍历外,还可以按列遍历。
- **合并单元格**:支持检测和处理合并的单元格。
- **样式信息**:尽管 `calamine` 主要关注数据本身,但它也提供了一些基础的样式信息访问方法。
- **公式计算**:如果需要计算公式的结果,可以在读取时指定参数来启用此功能。### 示例:完整代码示例以下是一个完整的例子,演示了如何使用 `calamine` 读取 Excel 文件中的数据,并进行简单的数据处理:```python
from calamine import Workbook, CellTypedef read_excel(file_path):workbook = Workbook.open(file_path)sheet = workbook.get_sheet_by_index(0)data = []for row in sheet.rows():row_data = [cell.value for cell in row if cell.type != CellType.EMPTY]if row_data:data.append(row_data)workbook.close()return dataif __name__ == "__main__":file_path = "example.xlsx"data = read_excel(file_path)# 打印前几行数据作为示例for row in data[:5]:print(row)
```

### 总结

`calamine` 是一个非常轻便且高效的工具,适用于需要快速解析多种格式电子表格的应用程序。它提供的 API 简单直观,易于集成到现有项目中。

10倍性能,待验证。

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

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

相关文章

探索 Android Instant Apps:InstantAppInfo 的深入解析与架构设计

探索 Android Instant Apps:InstantAppInfo 的深入解析与架构设计 引言 随着移动应用的快速发展,用户对应用体验的要求越来越高。为了提升用户体验,Google 在 2016 年推出了 Android Instant Apps 这一概念。Instant Apps 允许用户在不安装…

调整Python+Pytest+Allure+Yaml+Pymysql框架中需要执行的用例顺序

当pytest框架中有时时候会因为用例的前后关联关系需要调整用例执行顺序时则可以跟进具体的要求调整pytest.ini配置文件中执行用例文件夹的前后顺序 当如果是需要调整某个文件夹中用例的执行顺序时,则跟进具体的文件调整对应testcases中test_*.py文件中的执行顺序

interval coverage

题意理解:给定一个区间,我们需要把这个区间覆盖掉。问最少需要的区间数目。当然我们会给定 n 个区间选择。假设全选都不能覆盖就输出 − 1 -1 −1 思路分析:我感觉应该是找区间的端点。假设区间的左端点是 s ,右端点是 t &#…

【Dify】Dify自定义模型设置 | 对接DMXAPI使用打折 Openai GPT 或 Claude3.5系列模型方法详解

一、Dify & DMXAPI 1、Dify DIFY(Do It For You)是一种自动化工具或服务,旨在帮助用户简化操作,减少繁琐的手动操作,提升工作效率。通过DIFY,用户能够快速完成任务、获取所需数据,并且可以…

C++编程基础之override关键字

在C中,override关键字用于显式地标识派生类中的成员函数是对基类中虚函数的重写,具有以下重要作用和使用说明: 作用 增强代码可读性:通过使用override关键字,能够清晰地向阅读代码的人表明该函数是有意重写基类中的虚…

Redis数据库笔记—— Hash(哈希)的扩容机制(rehash)

大家好,这里是Good Note,关注 公主号:Goodnote,专栏文章私信限时Free。详细介绍Hash(哈希)的扩容机制(rehash)、源码、以及扩容和缩容过程。 文章目录 Redis 字典(dict)结构源码哈希…

Python自学 - 封装与私有化

1 Python自学 - 封装与私有化 1.1 封装的概念 封装是指将数据和方法封装在一起,并且需要通过类的实例来访问,这样就可以确保合适的方法来处理合适的数据,并可以做到只给外界看到想给外界看到的接口,减少数据或方法被滥用的风险。…

网络安全常见的问题

1. 什么是 DDoS 攻击?如何防范? 答:DDoS 攻击是指利用大量的计算机或者其他网络设备,同时向目标网络或者服务器 发送 大量的数据流量,以致其无法正常工作,从而导致网络瘫痪或者服务器宕机的攻击行 为。 …

<rust>在rust中,实现32位浮点数与16进制之间的转换

前言 本文是基于rust,对16进制、32位浮点数之间的互相转换的一个简单示例。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:hex 关键依赖 hex"0.4.3"对于字符串与16进制之间的互相转换&am…

pytest日志显示

在 pytest 中,可以通过 钩子函数 和 配置文件 pytest.ini 配置日志的显示方式,实现对日志的灵活控制。以下是常用实现方式及配置说明。 方式一:使用 conftest.py 钩子函数自定义日志显示 通过 conftest.py 文件中的钩子函数,实现…

支持向量机算法(一):像讲故事一样讲明白它的原理及实现奥秘

1、支持向量机算法介绍 支持向量机(Support Vector Machine,SVM)是一种基于统计学习理论的模式识别方法, 属于有监督学习模型,主要用于解决数据分类问题。SVM将每个样本数据表示为空间中的点,使不同类别的…

ES中的仓库和快照

文章目录 简介仓库(Repository)快照(Snapshot)常用命令记录 简介 在Elasticsearch(简称ES)中,仓库(repository)和快照(snapshot)是两种重要的备份…

数据结构与算法之二叉树: LeetCode 108. 将有序数组转换为二叉搜索树 (Ts版)

将有序数组转换为二叉搜索树 https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/ 描述 给你一个整数数组 nums ,其中元素已经按 升序 排列请你将其转换为一棵 平衡 二叉搜索树 示例 1 输入:nums [-10,-3,0,5,9…

Neo4j的部署和操作

注:本博文展示部署哥操作步骤和命令,具体报告及运行截图可通过上方免费资源绑定下载 一.数据库的部署与配置 在单个节点上对进行数据库的单机部署 (1)上传neo4j-community-3.5.30-unix.tar.gz到hadoop1的/export/so…

人工智能 前馈神经网络练习题

为了构建一个有两个输入( X 1 X_1 X1​、 X 2 X_2 X2​)和一个输出的单层感知器,并进行分类,我们需要计算权值 w 1 w_1 w1​和 w 2 w_2 w2​的更新过程。以下是详细的步骤和计算过程: 初始化参数 初始权值&#xff1a…

【博主推荐】 Microi吾码开源低代码平台,快速建站,提高开发效率

🍬引言 🍬什么是低代码平台? 低代码平台(Low-Code Platform)是一种使开发人员和业务用户可以通过图形化界面和少量的编程来创建应用程序的开发工具。与传统的编程方式相比,低代码平台大大简化了开发过程&a…

opencv CV_TM_SQDIFF未定义标识符

opencv CV_TM_SQDIFF未定义标识符 opencv4部分命名发生变换,将CV_WINDOW_AUTOSIZE改为WINDOW_AUTOSIZE;CV_TM_SQDIFF_NORMED改为TM_SQDIFF_NORMED。

理解 Tomcat 架构与自定义实现

前言 Tomcat 是一个轻量级的 Web 容器,被广泛应用于 Java Web 开发中。通过它,我们可以轻松地部署和运行 Web 应用。在本文中,我们将深入分析 Tomcat 的核心架构,同时结合一段代码,手动实现一个简化的 Tomcat 服务&am…

Harbor 仓库部署(docker-compose 部署方式)

一、 安装的前提条件 硬件 资源 最低 推荐 cpu2C4C内存4G8G硬盘40G160G 软件 软件 版本 描述 dockerv17.0.6-ce 安装参考官方文档 Install Docker Engine | Docker Documentation docker-composev1.18.0 安装参考官方文档 Overview | Docker Documentation Openssllatest…

使用Llama 3.1创建合成数据集以调优你的大型语言模型

使用Llama 3.1创建合成数据集以调优你的大型语言模型 在数据驱动的人工智能领域,数据是核心资产。开发高质量数据集既复杂又昂贵,因此很多实验室和开发者选择使用合成数据集。本文将介绍如何利用大型语言模型Llama 3.1 405B创建合成数据集,并…