新闻详情

新闻详情

首页 / 资讯中心 / 详情

Python xlrd 库完全指南:安装、语法、案例与常见错误详解

发布时间:2026/9/9 9:14:01来源:尧图网络
Python xlrd 库完全指南:安装、语法、案例与常见错误详解
1. 引言在 Python 数据处理领域Excel 文件的读取是一个常见需求。xlrd 是 Python 生态中一款经典且稳定的库专门用于读取 Excel 文件.xls 和 .xlsx 格式。尽管近年来 openpyxl 等库逐渐流行但 xlrd 凭借其轻量、高效、对旧格式 .xls 的完美支持在数据迁移、报表自动化、遗留系统对接等场景中仍占据重要地位。本文将从安装、核心语法、实际案例到常见错误全面介绍 xlrd 的使用方法。2. xlrd 包概述xlrdExcel Read是一个用于读取 Excel 文件的 Python 第三方库。它支持读取 .xlsExcel 97-2003 工作簿和 .xlsxExcel 2007 工作簿格式但不支持写入 Excel 文件。xlrd 的主要功能包括打开 Excel 工作簿并获取工作表列表按行、按列或按单元格读取数据读取单元格的数据类型、格式信息支持日期、时间、布尔值等特殊数据类型的解析支持合并单元格的识别支持命名区域Named Range的读取3. 安装与版本选择3.1 基础安装使用 pip 安装 xlrdpip install xlrd3.2 版本说明xlrd 目前有两个主要版本分支xlrd 2.0支持 .xls 和 .xlsx 格式功能最全。xlrd 2.0仅支持 .xls 格式不再支持 .xlsx。如果项目需要读取 .xlsx建议使用 openpyxl 或保持 xlrd 1.2.0 版本。如需固定版本pip install xlrd1.2.04. 核心语法与参数详解4.1 打开工作簿import xlrd 打开 Excel 文件 workbook xlrd.open_workbook(example.xls) 常用参数 formatting_infoTrue — 保留格式信息仅 .xls on_demandTrue — 按需加载工作表节省内存 logfileopen(log.txt,w) — 指定日志输出文件 workbook xlrd.open_workbook(example.xls, formatting_infoTrue)4.2 获取工作表# 获取所有工作表名称 sheet_names workbook.sheet_names() 按索引获取工作表从 0 开始 sheet workbook.sheet_by_index(0) 按名称获取工作表 sheet workbook.sheet_by_name(Sheet1)4.3 读取行和列# 获取行数和列数 rows sheet.nrows cols sheet.ncols 读取整行返回列表 row_data sheet.row_values(0) # 第 1 行 读取整列 col_data sheet.col_values(0) # 第 1 列 读取指定单元格 cell_value sheet.cell_value(0, 0) # 第 1 行第 1 列 获取单元格对象包含值和类型 cell sheet.cell(0, 0) print(cell.value, cell.ctype) # ctype: 0-空,1-文本,2-数字,3-日期,4-布尔,5-错误4.4 数据类型判断from xlrd import XL_CELL_TEXT, XL_CELL_NUMBER, XL_CELL_DATE, XL_CELL_BOOLEAN, XL_CELL_EMPTY cell sheet.cell(0, 0) if cell.ctype XL_CELL_TEXT: print(文本类型:, cell.value) elif cell.ctype XL_CELL_NUMBER: print(数字类型:, cell.value) elif cell.ctype XL_CELL_DATE: # 日期需要转换为 Python 的 datetime date_tuple xlrd.xldate_as_tuple(cell.value, workbook.datemode) from datetime import datetime print(日期类型:, datetime(*date_tuple)) elif cell.ctype XL_CELL_BOOLEAN: print(布尔类型:, bool(cell.value)) elif cell.ctype XL_CELL_EMPTY: print(空单元格)4.5 日期处理# 将 Excel 日期数值转换为 Python datetime from datetime import datetime, timedelta 方法一使用 xldate_as_tuple date_tuple xlrd.xldate_as_tuple(45000, workbook.datemode) 返回 (year, month, day, hour, minute, second) dt datetime(*date_tuple) 方法二直接转换为 datetime dt xlrd.xldate_as_datetime(45000, workbook.datemode)4.6 合并单元格处理# 获取合并单元格信息仅 .xls 格式支持 merged sheet.merged_cells # 返回 [(rlo, rhi, clo, chi), ...] for rlo, rhi, clo, chi in merged: print(f合并区域: 行{rlo}-{rhi-1}, 列{clo}-{chi-1}) # 合并区域的值通常存储在左上角单元格 value sheet.cell_value(rlo, clo) print(f合并值: {value})5. 8 个实际应用案例案例 1读取 Excel 文件并打印所有数据import xlrd workbook xlrd.open_workbook(data.xls) sheet workbook.sheet_by_index(0) for row in range(sheet.nrows): row_data sheet.row_values(row) print(row_data)案例 2按列读取并计算统计值import xlrd workbook xlrd.open_workbook(sales.xls) sheet workbook.sheet_by_name(销售数据) 读取第 3 列销售额 sales sheet.col_values(2, start_rowx1) # 跳过表头 total sum(sales) average total / len(sales) print(f总销售额: {total}, 平均销售额: {average:.2f})案例 3读取日期数据并格式化输出import xlrd from datetime import datetime workbook xlrd.open_workbook(attendance.xls) sheet workbook.sheet_by_index(0) for row in range(1, sheet.nrows): date_cell sheet.cell(row, 0) if date_cell.ctype 3: # 日期类型 dt xlrd.xldate_as_datetime(date_cell.value, workbook.datemode) print(f日期: {dt.strftime(%Y-%m-%d)}) name sheet.cell_value(row, 1) print(f姓名: {name})案例 4读取多个工作表并合并数据import xlrd workbook xlrd.open_workbook(monthly_report.xls) all_data [] for sheet_name in workbook.sheet_names(): sheet workbook.sheet_by_name(sheet_name) for row in range(1, sheet.nrows): row_data sheet.row_values(row) row_data.append(sheet_name) # 添加来源工作表名 all_data.append(row_data) print(f共合并 {len(all_data)} 条记录)案例 5处理合并单元格import xlrd workbook xlrd.open_workbook(merged.xls, formatting_infoTrue) sheet workbook.sheet_by_index(0) merged sheet.merged_cells 构建合并区域映射 merge_map {} for rlo, rhi, clo, chi in merged: value sheet.cell_value(rlo, clo) for r in range(rlo, rhi): for c in range(clo, chi): merge_map[(r, c)] value for row in range(sheet.nrows): for col in range(sheet.ncols): if (row, col) in merge_map: print(merge_map[(row, col)], end\t) else: print(sheet.cell_value(row, col), end\t) print()案例 6按条件筛选数据import xlrd workbook xlrd.open_workbook(employees.xls) sheet workbook.sheet_by_index(0) 筛选部门为技术部且年龄大于 30 的员工 for row in range(1, sheet.nrows): dept sheet.cell_value(row, 2) age sheet.cell_value(row, 3) if dept 技术部 and age 30: name sheet.cell_value(row, 1) print(f{name}, 年龄: {age}, 部门: {dept})案例 7读取命名区域Named Rangeimport xlrd workbook xlrd.open_workbook(named_ranges.xls) 获取所有命名区域 for name_obj in workbook.name_map.values(): print(f名称: {name_obj.name}, 范围: {name_obj.formula_text}) 通过名称读取数据需要解析范围此处简化 实际项目中建议结合 xlutils 或直接按已知行列读取案例 8大文件按需加载on_demand 模式import xlrd 使用 on_demand 模式只加载需要的工作表 workbook xlrd.open_workbook(large_file.xls, on_demandTrue) 只读取第 2 个工作表 sheet workbook.sheet_by_index(1) for row in range(sheet.nrows): print(sheet.row_values(row)) 释放未使用的工作表 workbook.release_resources()6. 常见错误与使用注意事项6.1 常见错误错误信息原因解决方案xlrd.biffh.XLRDError: Excel xlsx file; not supportedxlrd 2.0 不支持 .xlsx降级到 xlrd1.2.0 或改用 openpyxlIndexError: list index out of range访问了不存在的行或列索引检查sheet.nrows和sheet.ncols确认范围xlrd.biffh.XLRDError: No sheet named name指定的工作表名称不存在使用sheet_names()列出所有名称后核对TypeError: must be str, not float读取数字单元格时未做类型转换使用str(cell_value)或按类型分别处理xlrd.biffh.XLRDError: Unsupported format, or corrupt file文件损坏或不是有效 Excel 文件用 Excel 打开并另存为 .xls 后再试6.2 使用注意事项版本兼容性如果项目需要同时支持 .xls 和 .xlsx建议使用 xlrd1.2.0 或搭配 openpyxl 使用。内存管理处理超大文件时使用on_demandTrue参数按需加载工作表避免内存溢出。数据类型处理Excel 中的数字可能以浮点数形式存储读取后建议根据业务需求进行类型转换如int()或str()。空单元格空单元格返回空字符串而非None判断时需注意。日期处理Excel 日期存储为浮点数必须通过xldate_as_tuple或xldate_as_datetime转换。合并单元格只有左上角单元格有值其他区域返回空需通过merged_cells属性获取合并信息。格式信息formatting_infoTrue仅对 .xls 格式有效且会增加内存消耗。编码问题处理中文 Excel 文件时确保文件编码为 UTF-8 或 GBK必要时使用encodingutf-8参数。7. 总结xlrd 是 Python 读取 Excel 文件的经典工具尤其适合处理 .xls 格式的遗留数据。本文从安装、核心语法、8 个实际案例到常见错误与注意事项全面覆盖了 xlrd 的使用场景。在实际项目中建议根据文件格式和版本需求选择合适的 xlrd 版本并注意数据类型转换、合并单元格处理等细节。对于 .xlsx 格式的写入需求可搭配 xlwt 或 openpyxl 使用形成完整的 Excel 处理方案。《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章前6章涵盖深度学习基础包括张量运算、神经网络原理、数据预处理及卷积神经网络等后5章进阶探讨图像、文本、音频建模技术并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法每章附有动手练习题帮助读者巩固实战能力。内容兼顾数学原理与工程实现适配PyTorch框架最新技术发展趋势。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

多主体综合能源系统主从博弈优化调度Matlab实现 2026/9/9 16:33:02

多主体综合能源系统主从博弈优化调度Matlab实现

我先交代一下背景。这个项目是我在实际课题里被问到最多的一类问题——多主体综合能源系统、需求响应、电能交互、主从博弈四个关键词堆在一起,看着像四座山,但真正落地成Matlab代码时,核心就一句话:谁先出招,谁后应对…

阅读更多 →
MATLAB六轴机械臂建模仿真:运动学求解与轨迹规划详解 2026/9/9 16:33:02

MATLAB六轴机械臂建模仿真:运动学求解与轨迹规划详解

简介:这套MATLAB 6轴机械臂仿真资源包,面向机器人学学习者与工程师,提供了完整的运动学建模与仿真工具,涵盖逆向运动学(Ik_arm.m)、正向运动学(fK_arm.m)、DH参数定义(dh…

阅读更多 →
WorkBuddy实战:用自定义指令与任务自动化把重复工作交给AI 2026/9/9 16:33:02

WorkBuddy实战:用自定义指令与任务自动化把重复工作交给AI

这次我们看一个很有意思的 AI 工具方向:WorkBuddy。从名字就能看出来,它是来帮忙干活的,目标是把重复、琐碎、规则明确的工作从你手里接走。和单纯聊天 AI 不一样,WorkBuddy 更强调“指挥”两个字——你需要给它清晰的任务、固定的…

阅读更多 →
RPA订单数据自动提取与标准化整理全攻略:从零搭建电商自动化流程 2026/9/9 16:33:02

RPA订单数据自动提取与标准化整理全攻略:从零搭建电商自动化流程

接手这个项目之前,我发现一个很普遍的现象:几乎每个电商团队里都有人每天固定花一两个小时在订单数据上——从后台导出、复制到Excel、改格式、填表、发给财务或运营。这个活儿不难,但非常烦,而且一旦漏掉几行,月底对账…

阅读更多 →
一天修复混乱生活:从清空到重建的实操指南 2026/9/9 16:33:02

一天修复混乱生活:从清空到重建的实操指南

我第一次看到“How to fix your entire life in 1 day”这个标题的时候,第一反应是——又一个标题党。但后来我真的空出一整天,认认真真给自己做了一次“生活系统重装”之后,我意识到这句话其实没有骗人,只是被大多数人理解错了。…

阅读更多 →
网盘直链下载助手:3 步装好油猴脚本,用 IDM 和 Aria2 把文件拉下来 2026/9/9 16:29:59

网盘直链下载助手:3 步装好油猴脚本,用 IDM 和 Aria2 把文件拉下来

网盘直链下载助手:3 步装好油猴脚本,用 IDM 和 Aria2 把文件拉下来 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞