使用Python的openpyxl包操作Excel文件
程序员文章站
2022-04-19 10:03:22
这里写自定义目录标题使用文章在ubuntu上安装Python有两种方法中的方法安装Python3.8...
这里写自定义目录标题
一、Excel表的相关术语
在正式介绍如何使用openpyxl包来操作Excel表之前,需要简单了解以下若干个和Excel相关的术语:
术语 | 解释 |
---|---|
工作簿(Spreadsheet或Workbook) | 工作簿就是用户创建的一个以.xlsx或.xls为后缀的文件 |
工作表(Worksheet或Sheet) | 工作表是一个工作簿中的一页,一个工作簿可能有多个工作表 |
列(Column) | 列,一般以大写字母表示,如:A |
行(Row) | 行,一般以数字表示,如:1 |
单元格(Cell) | 列和行的交汇处,一般以字母数字表示,如:A1 |
二、安装openpyxl包
使用如下命令可以安装openpyxl
包:
pip install openpyxl
实际上,笔者尝试在Windows10平台上使用上述命令安装openpyxl
包时,遇到了以下两个问题,并通过对应方式得到了解决:
-
安装速度很慢:
pip
包管理工具默认从*的源下载,可以在命令后加选项-i 境内镜像源地址
进行换源安装; -
无法安装至期望路径:笔者的计算机上先在D盘安装过了Anaconda,所以默认后续所有的包都安装到了Anaconda的路径下,导致无法导入
openpyxl
包,于是又在命令后加上--target=期望指定的路径
。
因此,笔者通过下列命令快速完成了openpyxl
包的安装,并使之可以被正确导入使用:
pip install openpyxl -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --target=C:\Users\Administrator\AppData\Local\Programs\Python\Python38\Lib\site-packages
为了验证openpyxl
包的确被正确安装,并且可以正常使用,下面代码使用openpyxl
包创建一个简单的Excel表:
from openpyxl import Workbook
workbook = Workbook()
sheet = workbook.active
sheet['A1'] = 'Hello'
sheet['B1'] = 'openpyxl'
workbook.save(filename='hello_openpyxl.xlsx')
三、用openpyxl操作Excel
为了更好演示如何使用openpyxl操作Excel,本文使用了阿里云天池的一个数据集,原数据格式为CSV,此处将其复制后转到了Excel中,原始数据集可以从此处下载得到。
1. 用openpyxl读取Excel
下面在ipython中演示如何使用openpyxl
读取Excel:
>>> from openpyxl import load_workbook
>>> workbook = load_workbook(filename='sam_tianchi_mum_baby.xlsx')
>>> print(workbook.sheetnames) # 查看工作簿中的所有工作表
['Sheet 1', 'Sheet 2', 'Sheet 3']
>>> sheet = workbook.active # 获取活动的工作表,一般为第一个或最后一次修改的那个表
>>> sheet
<Worksheet "Sheet 1">
>>> sheet.title # 工作表的title属性可显示其名称
'Sheet 1'
在打开工作簿后,你就可以使用如下方式方便地从中获取想要的值:
>>> sheet['A1'] # 获取A1单元格对象
<Cell 'Sheet 1'.A1>
>>> sheet['A1'].value # 获取A1单元格的值
'user_id'
你也可以用.cell()
方法,通过行列的索引来获取某个单元格对象,进而使用.value
来获取单元格的值:
>>> sheet.cell(row=10, column=2)
<Cell 'Sheet 1'.B10>
>>> sheet.cell(row=10, column=2).value
20090708
需要指出的是,load_workbook()
函数的还有其他可选参数,这些参数可以改变Excel文件被导入后的行为,其中比较重要的有以下两个Bool
类型参数:
-
read_only
:可以只读模式导入一个Excel文件,这样就可以方便地打开较大的Excel文件; -
data_only
:导入时忽略Excel文件中的公式,只导入通过公式计算出的值。
2. 遍历Excel表中数据
openpyxl
提供多种遍历Excel表的方式,你可以根据自身需求选择使用:
- 使用类似切片的方式遍历Excel工作表:
>>> sheet['A1:C2']
((<Cell 'Sheet 1'.A1>, <Cell 'Sheet 1'.B1>, <Cell 'Sheet 1'.C1>),
(<Cell 'Sheet 1'.A2>, <Cell 'Sheet 1'.B2>, <Cell 'Sheet 1'.C2>))
- 获取某一或几列的所有单元格对象:
>>> # 获取某一列的所有的单元格
>>> sheet['A']
(<Cell 'Sheet 1'.A1>,
<Cell 'Sheet 1'.A2>,
<Cell 'Sheet 1'.A3>,
...
<Cell 'Sheet 1'.A954>)
>>> # 获取某几列的所有单元格
>>> sheet['A:B']
((<Cell 'Sheet 1'.A1>,
<Cell 'Sheet 1'.A2>,
...
<Cell 'Sheet 1'.A954>),
(<Cell 'Sheet 1'.B1>,
<Cell 'Sheet 1'.B2>,
...
<Cell 'Sheet 1'.B954>))
- 获取某一或几行的所有单元格对象:
>>> # 获取某一行的所有单元格对象
>>> sheet[5]
(<Cell 'Sheet 1'.A5>, <Cell 'Sheet 1'.B5>, <Cell 'Sheet 1'.C5>)
>>> # 获取某几行的所有单元格对象
>>> sheet[5:6]
((<Cell 'Sheet 1'.A5>, <Cell 'Sheet 1'.B5>, <Cell 'Sheet 1'.C5>),
(<Cell 'Sheet 1'.A6>, <Cell 'Sheet 1'.B6>, <Cell 'Sheet 1'.C6>))
3. 使用內置容器处理数据
4. 转换数据为Data Class
四、参考资料
本文地址:https://blog.csdn.net/weixin_37780776/article/details/107273705
上一篇: 我希望这三样我都能拥有
下一篇: django数据查询之聚合查询和分组查询