使用 Python 库来操作 Excel(xlrd 和 xlwt)
前些天,一个朋友咨询我说是否擅长操作 Excel,并且把两个 Excel 的文档发给我了。认真的听了下他的诉求,大致是需要把 A 文档的数据匹配到 B 文档,并且补充到 B 文档里,两个表格加起来共有 5 万多行的记录,这如果人肉操作怎么着也需要好几个小时。于是我开始着手 Google 看下 python 对于 excel 如果进行操作,现学现卖,最后完工。接下来就记录下这愉快的过程。
需求分析
先来看看下这两个表格的内容,A 表格有 4.5w 行,有 40 多列数据, B 表格有 6000 多行,30 多列的数据,需求是 B 表格中有一列 贷款目前状态
的数据来自 A 表,并且会涉及到重复,条件为以身份证筛选,再以姓名为基准做匹配。接下来我会脱敏举例一个 demo 进行说明。
A 表格:
序号 | 姓名 | 性别 | 身份证 | 地址 | 是否失信 | 担保人 | 经放人 | 借款方式 | 贷款状态 |
---|---|---|---|---|---|---|---|---|---|
0 | 张三 | 男 | xxxxx | xxx | xxx | xxxxx | xxx | xxx | 核销 |
1 | 李四 | xxxxx | xxx | xxx | xxxxx | xxx | xxx | 置换 | |
2 | 王五 | 女 | xxxxx | xxx | xxx | xxxxx | xxx | xxx | 核销 |
B 表格:
序号 | 姓名 | 性别 | 身份证 | 地址 | 是否失信 | 贷款状态 |
---|---|---|---|---|---|---|
0 | 赵六 | 男 | xxxxx | xxx | xxx | ??? |
1 | 张三 | xxxxx | xxx | xxx | ??? | |
2 | 李四 | 女 | xxxxx | xxx | xxx | ??? |
根据以上模拟的 Excel 表格,我们需要根据名称把表格 A 的贷款状态(10列)输入到表格 B 的最后一列的贷款状态。
Python 操作 Excel 方案介绍
当 Google 一下,你会发现 Python 操作 Excel 还是有几种方法的,这里我只介绍使用 xlrd 和 xlwt,我的电脑环境为 macOS - Version 10.15.3 (19D76)
,Python 版本为 Python 2.7.10 (default, Jul 30 2019, 21:28:59)
。接下来是依赖库的说明。
首先介绍下 xlrd 库,它主要是用来读取 Excel 的内容,可以通过执行 pip install xlrd
来进行安装,然后在 python 脚本里通过执行 >>> import xlrd
和 >>> help(xlrd)
可以看到 xlrd 的帮助信息,里面有 xlrd 包中的一些模块以及一些成员变量、常量、函数。具体的 xlrd API 使用说明,这个文档里都有
其次介绍下 xlwt,它主要是用来对 Excel 进行编辑的,可以通过执行 pip install xlwt
来安装,同样这个文档里也都有包含 xlwt 的 API 使用说明。
注意:
基本 API
读取工作表:
workbook.sheets():工作表实例构成的 list,可通过索引读取工作表
workbook.save():保存修改的工作表
worksheet = workbook.sheet_by_name(‘xxx’) :通过名字打开工作簿
worksheet = workbook.sheet_by_index(i) :通过编号为 i(索引从 0 开始)的工作簿打开工作表
读取单元格内容:
注意 xlrd 库对于读取 Excel 工作簿的行和列索引都是从 0 开始
row = worksheet.row_values(i) :读取第 i 行中的所有内容,返回一个 list
col = worksheet.col_values(k) :读取第 k 列中的内容,返回一个 list
cell= worksheet.cell_value(r, c):读取第 i 行第 k 列单元格内容
workbook.get_sheet(0).write(i, k, source):获取 i 行,k 列的内容,并将内容替换为 source
代码编写
- python
1 | #!/usr/bin/env python |
当以上文件和代码执行完毕后,会得到一个新文件:
C 表格:
序号 | 姓名 | 性别 | 身份证 | 地址 | 是否失信 | 贷款状态 |
---|---|---|---|---|---|---|
0 | 赵六 | 男 | xxxxx | xxx | xxx | ??? |
1 | 张三 | xxxxx | xxx | xxx | 核销 | |
2 | 李四 | 女 | xxxxx | xxx | xxx | 置换 |