2.Python读取excel数据
2.1 xlrd介绍
2.1.1 xlrd是什么?
xlrd是一个用于从Excel文件(无论是.xls还是.xlsx文件)读取数据和格式化信息的库。
可参考网址:https://xlrd.readthedocs.io/en/latest/index.html
2.1.2 xlrd安装
(1) 在安装了python 环境的前提下
(2) windows+r输入cmd进入终端
(3)执行pip install xlrd
如图所示:
2.2 xlrd使用
2.2.1 xlrd导入
当我们要调用库中的方法进行操作时。那第一步,就是通过import关键字来导入库。
代码如下:
import xlrd
2.2.2 Python操作工作簿
xlrd.open_workbook(filename) # 获取工作蒲
• filename–>文件名以及路径,如果路径或者文件名有中文给前面加一个r保留原生字符。
代码如下:
`book = xlrd.open_workbook(filename)
2.2.3 Python操作工作表
book.nsheets # 获取工作表个数,返回值为int
book.sheet_names() # 获取工作表名,返回值为list
book.sheets() # 以列表返回工作蒲中的所有工作表
• 由于book.sheets()获取的是以列表返回工作蒲中的所有工作表,那就可以通过索引来获取单个工作表
• 代码如下:
book.sheets()[0] # 获取第一个工作表
book.sheet_by_index(sheetx) # 通过索引获取工作表
• sheetx–>工作表索引(索引从0开始)
• 代码如下:
book.sheet_by_index(0) # 获取第一个工作表
book.sheet_by_name(sheet_name) # 通过工作表名获取工作表
• sheet_name–>工作表名
book.sheet_loaded(sheet_name_or_index) # 判断是否存在工作表,返回值为布尔
• sheet_name_or_index–>工作表名或者(or)索引
• 代码如下:
book.sheet_loaded(index or sheet_name) # 作or运算
2.2.4 Python读取excel行数据
table.nrows # 返回工作表的总行数
table.row(rowx) # 返回由该行中所有的单元格对象组成的列表
table.row_slice(rowx, start_colx=0, end_colx=None) # 返回由该行中开始列到结束列的单元格对象组成的列表
• rowx–>指定行(默认从0开始)
• start_colx–>开始列
• end_colx–>结束列
table.row_types(rowx, start_colx=0, end_colx=None) # 返回该行切片后列表中每单元格的数据类型
• rowx–>指定行(默认从0开始)
• start_colx–>开始列
• end_colx–>结束列
注意
excel中数据类型对照:
ctype | |
---|---|
0 | empty(空值) |
1 | string(字符串) |
2 | number(数字) |
3 | date(日期) |
4 | boolean(布尔) |
5 | error(错误) |
table.row_values(rowx, start_colx=0, end_colx=None) # 返回该行切片后列表中每单元格的值
table.row_len(rowx) # 返回该行有效单元格
示例1-1:
导入xlrd库
import xlrd as xr
读取数据文件weather_expectation.xlsx,并传入一个变量book中:
book = xr.open_workbook('weather_expectation.xlsx')
查询该变量book:
<xlrd.book.Book at 0x8522780>
打开原文件,文件里有两个工作簿,我们需要的工作簿在第二个工作簿中,因此索引值取1。
随后根据索引获取第一个工作表,将对象传入参数sheet_two中:
sheet_two = book.sheet_by_index(1)
查询变量sheet_two得:
<xlrd.sheet.Sheet at 0x87283c8>
说明已经获取到变量sheet了,因此我们可以继续后面的工作,我们通过nrows属性获取一下工作表的有效总行数:
sheet_two.nrows # 获取工作表的有效总行数
输出结果为
7626
打开原文件,发现该工作表也有7626行
我们查询一下第七行的数据
sheet_two.row(6) # 获取第几行,注意:索引从0开始
注意,索引是从0开始,因此索引值为6,输出结果为:
[text:'62823',
text:'20150710160000',
text:'受“莲花”残余云系影响,昨天夜间到今天早晨,我市东部地区出现暴雨,最大降雨为坪西站76.1毫米,其余地区小到中雨;沿海和高地阵风8-9级,全市最大阵风出现在大梧桐,26.9米/秒;白天风雨减弱,多云间晴天,局部有阵雨;相对湿度85%-92%;气温24.6℃-33.1℃;截至下午16时,深圳市国家基本气象站记录到11.9毫米降水。',
text:'多云,天气炎热,午后局部有阵雨;气温27-33℃;西到西北风2-3级;相对湿度60%-85% ',
text:'预计未来一周我市以多云天气为主,天气炎热,部分时间有阵雨或雷阵雨',
text:'20150710154100',
text:'12.png',
text:'27',
text:'33',
text:'0.0',
text:'2',
text:'西',
text:'60.0',
text:'85.0',
text:'-',
text:'-',
text:'-',
text:'27',
text:'33',
text:'02_2.png',
text:'-',
text:'1',
text:'1',
text:'1',
text:'287894',
text:'20150711035856',
text:'-',
text:'-',
text:'-']
查看源数据为结果为:
跟上面的数据吻合。
因此我们可以读取第七行里从第六列开始的数据,通过切片的方式进行读取。
sheet_two.row(6)[6:]
获取索引为6行,索引为6列后的数据的类型
sheet_two.row_types(6,6) # 获取索引为6行 索引为6列后的数据的类型
输出结果为:
array('B', [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
查表可知,数据类型均为字符串。
通过row_values()查询第六行每个单元格的值:
sheet_two.row_values(6)
输出结果为:
['62823',
'20150710160000',
'受“莲花”残余云系影响,昨天夜间到今天早晨,我市东部地区出现暴雨,最大降雨为坪西站76.1毫米,其余地区小到中雨;沿海和高地阵风8-9级,全市最大阵风出现在大梧桐,26.9米/秒;白天风雨减弱,多云间晴天,局部有阵雨;相对湿度85%-92%;气温24.6℃-33.1℃;截至下午16时,深圳市国家基本气象站记录到11.9毫米降水。',
'多云,天气炎热,午后局部有阵雨;气温27-33℃;西到西北风2-3级;相对湿度60%-85% ',
'预计未来一周我市以多云天气为主,天气炎热,部分时间有阵雨或雷阵雨',
'20150710154100',
'12.png',
'27',
'33',
'0.0',
'2',
'西',
'60.0',
'85.0',
'-',
'-',
'-',
'27',
'33',
'02_2.png',
'-',
'1',
'1',
'1',
'287894',
'20150711035856',
'-',
'-',
'-']
查询第七行的数据长度:
sheet_two.row_len(6)
查询结果为:
29
原数据也有29列,跟源数据吻合。
2.2.5 Python读取excel列数据
table.ncols # 返回工作表的总列数
table.col(colx, start_rowx=0, end_rowx=None) # 返回由该列中所有的单元格对象组成的列表
table.col_slice(colx, start_rowx=0, end_rowx=None) # 返回由该列中开始行到结束行的单元格对象组成的列表
table.col_types(colx, start_rowx=0, end_rowx=None) # 返回该行切片后列表中每单元格的数据类型
table.col_values(colx, start_rowx=0, end_rowx=None) # 返回该行切片后列表中每单元格的值
示例1-2:
在示例1-1的基础上,我们查询该数据的有效列数:
sheet_two.ncols # 获取该工作表有效列数
输出结果为:
29
跟原数据吻合。
后通过col()方法读取表格索引为2的列的0-9行
sheet_two.col(2,0,10) # 获取该表格索引为2列 的0-9行
col()方法的第一个参数为列数索引,第二个参数为起始行,第三个参数为结束行。我们也可以通过切片的方式去读取数据:
sheet_two.col(2)[0:10]
查询结果为:
[text:'WEATHERBACK',
text:'昨天夜间到今天早晨,我市多云转阴天;早晨大部分地区最低气温26℃左右,吹和缓到清劲的偏北风,沿海和高地阵风6-7级;相对湿度55%-70%;全市大部分地区能见度在10-20公里之间。截至到早晨5时,深圳市国家基本气象站未记录到降水。我台已于9日8时30分将全市台风白色预警升级为蓝色。',
text