当前位置: 首页 > article >正文

[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, CellType

def 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 data

if __name__ == "__main__":
    file_path = "example.xlsx"
    data = read_excel(file_path)
    
    # 打印前几行数据作为示例
    for row in data[:5]:
        print(row)
```

### 总结

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

10倍性能,待验证。


http://www.kler.cn/a/468466.html

相关文章:

  • 【信号滤波 (补充)】二阶陷波滤波代码推导过程(C++)
  • 【CPU】堆栈和堆栈指针(个人草稿)
  • KAGGLE竞赛实战2-捷信金融违约预测竞赛-part1-数据探索及baseline建立
  • 如何在 Spring Cloud Gateway 中创建全局过滤器、局部过滤器和自定义条件过滤器
  • Linux 基础七 内存
  • Markdown中类图的用法
  • 19.3、Unix Linux安全分析与防护
  • MongoDB相关使用问题
  • ansible-Ad-hoc命令行模式
  • java 字典表加载内存
  • Bash Shell的操作环境
  • NLP中特征提取方法的总结
  • 使用javacv获取海康威视rtsp流的详细教程
  • Samsung手机首次主要采用竞对Micron LPDDR5内存
  • WPF通过反射机制动态加载控件
  • 专家混合(MoE)大语言模型:免费的嵌入模型新宠
  • Linux -- 端口号、套接字、网络字节序、sockaddr 结构体
  • 工业5G路由器让无人机数据传输 “飞” 起来
  • 数据结构C语言描述9(图文结合)--二叉树和特殊书的概念,二叉树“最傻瓜式创建”与前中后序的“递归”与“非递归遍历”
  • 如何将服务器的镜像推送到阿里的容器镜像服务中
  • IGBT的学习【一】
  • Linux-----进程处理(waitpid,进程树,孤儿进程)
  • SWD(一种用于嵌入式系统调试的串行通信串口)
  • 【游戏设计原理】41 - 游戏的核心
  • 【算法不挂科】算法期末考试题库(带解析)【选择题53道&填空题36道&算法填空题7道&问答题33道】
  • mariadb变更数据存放目录