xlrd:专攻老式 .xls 文件的 Python 读取库
xlrd:专攻老式 .xls 文件的 Python 读取库
xlrd 在 GitHub 上拿到了 2,208 个 Star。
python-excel 组织维护的这个库,功能单一:读取 .xls 格式的 Excel 文件,把里面的数据和格式信息提取出来。不花哨,就干这一件事。

1、 它能做什么
读 .xls 文件,把工作表名称、行列数、单元格内容都拿出来。
支持的细节比较到位:读取单元格类型(空白、文本、数字、日期、布尔值),提取格式化信息(字体、颜色、对齐方式),计算合并单元格的范围。公式虽然不直接解析,但公式的计算结果能读出来。
不支持的东西也写得很清楚:图表、宏、图片、嵌入对象、VBA 模块、注释、超链接、自动筛选、高级筛选、数据透视表、条件格式、数据验证。密码保护的文件也打不开。这些都是明确不会支持的范畴,读取时会安全忽略,不会报错。
2、 为什么要用 xlrd
很多政府机构、财务部门、老旧企业系统里,.xls 格式的文件还在大量流转。这些文件用 Excel 97-2003 时代的标准生成,十几年过去,格式没变过。
处理这类文件的时候,直接用 xlrd 比用 Pandas 轻量得多。Pandas 底层调 xlrd 或 openpyxl,中间多一层,启动慢、内存占用大。如果任务只是从 .xls 里抽数据,xlrd 一行代码就够,不需要引入整个数据科学栈。
另外 xlrd 的 API 很稳。这个库从 2012 年开始维护,接口基本没变过,跑在 Python 2.7 到 3.x 上都没问题。
3、 安装和快速上手
安装:
pip install xlrd
读一个文件只需要三行:
import xlrd
book = xlrd.open_workbook("myfile.xls")
print("工作表数量: {0}".format(book.nsheets))
print("工作表名称: {0}".format(book.sheet_names()))
sh = book.sheet_by_index(0)
print("{0} 有 {1} 行 {2} 列".format(sh.name, sh.nrows, sh.ncols))
print("D30 单元格的值: {0}".format(sh.cell_value(rowx=29, colx=3)))
for rx in range(sh.nrows):
print(sh.row(rx))
命令行也能用,快速预览每个工作表的前几行:
python PYDIR/scripts/runxlrd.py 3rows *.xls

4、 一个重要的限制
xlrd 从 2.0 版本开始,只读 .xls 文件。
如果手头是 .xlsx、.xlsm 这类新格式,xlrd 会直接报错。这是作者有意为之的,把 .xls 解析这件事做透,不去碰新格式。需要处理 .xlsx 的话,可以用同组织的 openpyxl 库,或者直接用 Pandas。
这个决策争议不小,但反过来想,也意味着 xlrd 不会因为兼容新格式而引入 bug,稳定性反而更高。
5、 适合哪些人用
- 需要从遗留系统的 .xls 文件中批量提取数据的开发者
- 做数据迁移项目、需要解析大量旧格式 Excel 的场景
- 不想引入 Pandas 这种重量级依赖、只需要读一个老格式文件的轻量需求
做数据迁移项目、需要解析大量旧格式 Excel 的场景
- 不想引入 Pandas 这种重量级依赖、只需要读一个老格式文件的轻量需求
更多推荐

所有评论(0)