[python3]Excel解析库-xlrd

news2025/1/7 17:19:49

      `xlrd` 是一个用于从 Excel 文件中读取数据的 Python 库,主要用于处理 `.xls` 文件(即 Excel 97-2003 格式)。它允许你用 Python 编写程序来解析和提取 Excel 文件中的信息,而无需实际运行 Microsoft Excel 应用程序。需要注意的是,从版本 2.0.0 开始,`xlrd` 不再支持读取 `.xls` 文件,只支持 `.xlsx` 文件格式。如果你需要读取 `.xls` 文件,应该安装低于 2.0.0 版本的 `xlrd`。

安装

要使用 `xlrd`,你可以通过 pip 来安装它。对于 `.xlsx` 文件的支持,请确保安装的是低于 2.0.0 的版本:

```bash
pip3 install xlrd<2.0.0
```

如果你只需要处理 `.xls` 文件,则可以直接安装最新版本的 `xlrd`:

```bash
pip3 install xlrd
```

基本用法

#### 打开和读取 `.xls` 文件

以下是如何使用 `xlrd` 读取 `.xls` 文件并获取其中的数据:

```python
import xlrd

# 打开工作簿
workbook = xlrd.open_workbook('example.xls')

# 获取所有的工作表名称
sheet_names = workbook.sheet_names()
print(f"Sheet names: {sheet_names}")

# 选择第一个工作表
sheet = workbook.sheet_by_index(0)

# 或者根据名称选择工作表
# sheet = workbook.sheet_by_name('Sheet1')

# 遍历所有行
for row_idx in range(sheet.nrows):
    print(sheet.row_values(row_idx))  # 输出每一行的所有单元格值
```

#### 处理特定单元格的数据

你可以直接访问特定单元格的数据,或者遍历一行或多列的数据:

```python
# 获取特定单元格的值
cell_value = sheet.cell(0, 0).value
print(f"Value at A1: {cell_value}")

# 获取某一行或某一列的数据
row_data = sheet.row_values(0)  # 获取第一行的数据
col_data = sheet.col_values(0)  # 获取第一列的数据
print(f"Row data: {row_data}")
print(f"Column data: {col_data}")
```

#### 读取日期和时间

`xlrd` 可以正确地处理 Excel 中的日期和时间格式,并将其转换为 Python 的 `datetime` 对象:

```python
from datetime import datetime, timedelta

def convert_excel_date(excel_date):
    """将 Excel 的日期序列号转换为 Python 的 datetime"""
    if excel_date > 60:
        excel_date -= 1  # 调整1900年2月29日的问题
    return datetime(1899, 12, 30) + timedelta(days=excel_date)

# 假设 A1 单元格包含一个日期
excel_date = sheet.cell(0, 0).value
if isinstance(excel_date, float):  # 确保是数字类型的日期
    python_date = convert_excel_date(excel_date)
    print(f"Converted date: {python_date.strftime('%Y-%m-%d')}")
```

### 注意事项

- **版本兼容性**:如前所述,确保使用正确的 `xlrd` 版本来匹配你需要处理的文件格式。
- **性能问题**:对于非常大的 Excel 文件,`xlrd` 可能会遇到性能瓶颈,因为它需要将整个文件加载到内存中进行处理。
- **替代方案**:如果你正在寻找更现代的方法来处理 Excel 文件,特别是 `.xlsx` 文件,可以考虑使用 `openpyxl` 或 `pandas` 等库,它们提供了更好的性能和支持更多功能。

### 示例:完整代码示例

以下是一个完整的例子,演示了如何使用 `xlrd` 读取 `.xls` 文件并打印出其内容:

```python
import xlrd
from datetime import datetime, timedelta

def read_excel(file_path):
    # 打开工作簿
    workbook = xlrd.open_workbook(file_path)

    # 获取所有的工作表名称
    sheet_names = workbook.sheet_names()
    print(f"Sheet names: {sheet_names}")

    # 选择第一个工作表
    sheet = workbook.sheet_by_index(0)

    # 遍历所有行并打印出来
    for row_idx in range(sheet.nrows):
        row_data = sheet.row_values(row_idx)
        print(row_data)

        # 如果有日期数据,尝试转换为 Python 的 datetime
        for col_idx, cell_value in enumerate(row_data):
            if isinstance(cell_value, float):  # 检查是否可能是日期
                try:
                    python_date = convert_excel_date(cell_value)
                    print(f"Cell ({row_idx}, {col_idx}) as date: {python_date.strftime('%Y-%m-%d')}")
                except Exception as e:
                    print(f"Failed to convert cell ({row_idx}, {col_idx}): {e}")

def convert_excel_date(excel_date):
    """将 Excel 的日期序列号转换为 Python 的 datetime"""
    if excel_date > 60:
        excel_date -= 1  # 调整1900年2月29日的问题
    return datetime(1899, 12, 30) + timedelta(days=excel_date)

if __name__ == "__main__":
    file_path = 'example.xls'
    read_excel(file_path)
```

总结

`xlrd` 是一个简单易用的库,适用于需要读取 `.xls` 文件的应用场景。然而,考虑到它对较新文件格式的支持有限以及可能存在的性能问题,在选择工具时应该权衡项目的长期需求和技术栈的选择。

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

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

相关文章

【工具整理】WIN换MAC机器使用工具整理

最近公司电脑升级&#xff0c;研发同学统一更换了 Mac Book Pro 笔记版电脑&#xff0c;整理一下安装了那些软件以及出处&#xff0c;分享记录下&#xff5e; 知识库工具 1、语雀 网址&#xff1a;语雀&#xff0c;为每一个人提供优秀的文档和知识库工具 语雀 个人花园&…

【GUI-pyqt5】QWidget类

1. 描述 所有可视空间的基类是一个最简单的空白控件控件是用户界面的最小元素 接收各种事件&#xff08;鼠标、键盘&#xff09;绘制在桌面上&#xff0c;显示给用户看 每个控件都是矩形的&#xff0c;它们按z轴顺序排序控件由其父控件和前面的控件剪切没有父控件的控件&#…

SpringBoot Maven 项目 pom 中的 plugin 插件用法整理

把 SpringBoot Maven 项目打包成 jar 文件时&#xff0c;我们通常用到 spring-boot-maven-plugin 插件。 前面也介绍过&#xff0c;在 spring-boot-starter-parent POM 和 spring-boot-starter POM 中都有插件的管理&#xff0c;现在我们就撸一把构建元素中插件的用法。 一、…

springboot实战纪实-课程介绍

教程介绍 Spring Boot是由Pivotal团队提供的一套开源框架&#xff0c;可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持&#xff0c;可以帮助开发者更轻松快捷地构建出企业级应用。 Spring Boot通过自动配置功能&#xff0c;降低了复杂性&#xff0c;同时支持…

源代码编译安装X11及相关库、vim,配置vim(2)

一、编译安装vim 编译时的cofigure选项如下.只有上一步的X11的包安装全了&#xff08;具体哪些是必须的&#xff0c;哪些是多余的没验证&#xff09;&#xff0c;configure才能认为X的库文件和头文件是可以用的 ./configure --prefixpwd/mybuild \--x-includes/path/to/X11/m…

直接插入排序、折半插入排序、2路插入排序、希尔排序

本篇是排序专栏博客的第一篇&#xff0c;主要探讨以 “插入” 为核心思想的排序算法该如何实现 文章目录 一、前言二、直接插入排序1. 算法思想与操作分析2. 代码实现version 1version 2 3. 复杂度分析 三、折半插入排序1. 算法思想与操作分析2. 代码实现3. 复杂度分析 四、2路…

Ansible之批量管理服务器

文章目录 背景第一步、安装第二步、配置免密登录2.1 生成密钥2.2 分发公钥2.3 测试无密连接 背景 Ansible是Python强大的服务器批量管理 第一步、安装 首先要拉取epel数据源&#xff0c;执行以下命令 yum -y install epel-release安装完毕如下所示。 使用 yum 命令安装 an…

让 Agent 具备语音交互能力:技术突破与应用前景(16/30)

让 Agent 具备语音交互能力&#xff1a;技术突破与应用前景 一、引言 在当今数字化时代&#xff0c;人机交互方式正经历着深刻的变革。从早期的命令行界面到图形用户界面&#xff0c;再到如今日益普及的语音交互&#xff0c;人们对于与机器沟通的便捷性和自然性有了更高的追求…

学生作业完成情况管理程序

网上看到的一个课程设计,正好练练手。 首先设计数据库 数据库有三张表&#xff0c;分别是班级表&#xff0c;学生表&#xff0c;作业成绩表。 学生表中外键关联班级表&#xff0c;作业成绩表中外键关联学生表。具体如下图所示 班级表 学生表学生表外键关联 …

基于vue的商城小程序的毕业设计与实现(源码及报告)

环境搭建 ☞☞☞ ​​​Vue入手篇(一)&#xff0c;防踩雷(全网最详细教程)_vue force-CSDN博客 目录 一、功能介绍 二、登录注册功能 三、首页 四、项目截图 五、源码获取 一、功能介绍 用户信息展示&#xff1a;页面顶部设有用户头像和昵称展示区&#xff0c;方便用户识别…

DeepSeek V3“报错家门”:我是ChatGPT

搜 &#xff1a;海讯无双Ai 要说这两天大模型圈的顶流话题&#xff0c;那绝对是非DeepSeek V3莫属了。 不过在网友们纷纷测试之际&#xff0c;有个bug也成了热议的焦点—— 只是少了一个问号&#xff0c;DeepSeek V3竟然称自己是ChatGPT。 甚至让它讲个笑话&#xff0c;生成…

利用webworker解决性能瓶颈案例

目录 js单线程的问题webworker的基本使用webworker的常见应用可视化优化导出Excel js单线程的问题 众所周知&#xff0c;js不擅长计算&#xff0c;计算是同步的&#xff0c;大规模的计算会让js主线程阻塞&#xff0c;导致界面完成卡死。比如有一个600多亿次的计算&#xff0c;…

深入理解卷积神经网络(CNN):图像识别的强大工具

1、引言 卷积神经网络&#xff08;CNN&#xff09;是一种深度学习模型&#xff0c;特别适合分析视觉数据。它们在处理图像和视频任务时表现尤为出色。由于CNN在物体识别方面的高效性&#xff0c;这种网络架构广泛应用于计算机视觉领域&#xff0c;例如图像分类、物体检测、面部…

R语言安装教程与常见问题

生物信息基础入门笔记 R语言安装教程与常见问题 今天和大家聊一个非常基础但是很重要的技术问题——如何在不同操作系统上安装R语言&#xff1f;作为生物信息学数据分析的神兵利器&#xff0c;R语言的安装可谓是入门第一步&#xff0c;学术打工人的必备技能。今天分享在Windows…

VOC数据集格式转YOLO格式

将VOC格式的数据集转换为YOLO格式通常涉及以下几个步骤。YOLO格式的标注文件是每个图像对应一个.txt文件&#xff0c;文件中每一行表示一个目标&#xff0c;格式为&#xff1a; <class_id> <x_center> <y_center> <width> <height>其中&#xf…

win10搭建zephyr开发环境

搭建环境基于 zephyr官方文档 基于官方文档一步一步走很快就可以搞定 一、安装chocolatey 打开官网 https://community.chocolatey.org/courses/installation/installing?methodinstall-from-powershell-v3 1、用管理员身份打开PowerShell &#xff08;1&#xff09;执行 …

物体切割效果

1、物体切割效果是什么 在游戏开发中&#xff0c;物体切割效果就是物体看似被切割、分割或隐藏一部分的视觉效果。 这种效果常用与游戏和动画中&#xff0c;比如角色攻击时的切割效果&#xff0c;场景中的墙壁切割效果等等。 2、物体切割效果的基本原理 在片元着色器中判断片…

k8s集群监控系统部署方案

1.方案介绍 本文介绍一种k8s集群监控系统,该系统可以监控k8s集群中的pod和node的性能指标,以及K8s资源对象的使用情况。 监控流程: 集群资源数据采集(cadvisor、node-exporter、kube-state-metrics)-- 数据收集、存储、处理等(prometheus)-- 数据可视化查询和展示(gra…

RP2K:一个面向细粒度图像的大规模零售商品数据集

这是一种用于细粒度图像分类的新的大规模零售产品数据集。与以往专注于相对较少产品的数据集不同&#xff0c;我们收集了2000多种不同零售产品的35万张图像&#xff0c;这些图像直接在真实的零售商店的货架上拍摄。我们的数据集旨在推进零售对象识别的研究&#xff0c;该研究具…

Linux(Centos 7.6)命令详解:ls

1.命令作用 列出目录内容(list directory contents) 2.命令语法 Usage: ls [OPTION]... [FILE]... 3.参数详解 OPTION: -l&#xff0c;long list 使用长列表格式-a&#xff0c;all 不忽略.开头的条目&#xff08;打印所有条目&#xff0c;包括.开头的隐藏条目&#xff09…