找回密码
 会员注册
查看: 8|回复: 0

python应用-高效使用xlrd库读取excel表内容

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
72245
发表于 2024-9-7 20:28:25 | 显示全部楼层 |阅读模式
学习目录了解下电脑中的excel表格文件格式 安装xlrd库xlrd库读取表格内容1先准备一个表格‘表格.xls’,表格中包含两个sheet页2导入xlrd库3用一个图展示下xlrd常用的函数4分别展示下表格中按行/按列/按单元格获取的内容5拓展内容excel表格是大家经常用到的文件格式,各行各业都会跟它打交道。本次我们介绍经常用到的两个经典库,xlrd和xlwt,xlrd用于读取excel表格内容,xlwt用于写入excel表格内容。了解下电脑中的excel表格文件格式微软或者金山的excel表格编辑保存时一般要选择文件后缀,有xls和xlsx两类。xls和xlsx后缀文件的主要区别:文件格式:xls是二进制格式,而xlsx是基于XML的压缩方式。版本:xls是Excel2003及以前版本生成的文件格式,而xlsx是Excel2007及以后版本生成的文件格式。兼容性:xlsx格式向下兼容,而xls格式不支持向后兼容。安装xlrd库pipinstallxlrd-ihttps://mirrors.aliyun.com/pypi/simple/xlrd库默认安装最新的库,新版本的xlrd只支持.xls文件,如果需要读取.xlsx文件时需要安装旧版本(比如指定版本xlrd==1.2.0)。xlrd库读取表格内容1先准备一个表格‘表格.xls’,表格中包含两个sheet页。2导入xlrd库执行importxlrd导入该库3用一个图展示下xlrd常用的函数4分别展示下表格中按行/按列/按单元格获取的内容按行获取内容获取总行数#打开表格data=xlrd.open_workbook('表格.xls')#获取sheet1的内容sheet1=data.sheets()[0]#行数sheet1_nrows=sheet1.nrowsprint(f'sheet1行数:{sheet1_nrows}')#结果sheet1行数:4row()函数获取的内容foriinrange(sheet1_nrows):sheet1_row_content=sheet1.row(i)print(f'sheet1第{i+1}行内容:{sheet1_row_content}')#结果:sheet1第1行内容:[text:'user',text:'age']sheet1第2行内容:[text:'lili',number:21.0]sheet1第3行内容:[text:'zhangsan',number:13.0]sheet1第4行内容:[text:'lisi',number:35.0]row_values()函数获取的内容foriinrange(sheet1_nrows):sheet1_row_content=sheet1.row_values(i)print(f'sheet1第{i+1}行内容:{sheet1_row_content}')#结果sheet1第1行内容:['user','age']sheet1第2行内容:['lili',21.0]sheet1第3行内容:['zhangsan',13.0]sheet1第4行内容:['lisi',35.0]get_rows()函数返回一个生成器,也是可迭代对象foriinsheet1.get_rows():print(f'sheet1中的行内容:{i}')#结果:sheet1中的行内容:[text:'user',text:'age']sheet1中的行内容:[text:'lili',number:21.0]sheet1中的行内容:[text:'zhangsan',number:13.0]sheet1中的行内容:[text:'lisi',number:35.0]2按列获取内容获取总列数sheet1_ncols=sheet1.ncolsprint(f'sheet1列数:{sheet1_ncols}')col()函数获取的内容foriinrange(sheet1_ncols):sheet1_col_content=sheet1.col(i)print(f'sheet1第{i+1}列内容:{sheet1_col_content}')#结果:sheet1第1列内容:[text:'user',text:'lili',text:'zhangsan',text:'lisi']sheet1第2列内容:[text:'age',number:21.0,number:13.0,number:35.0]col_values()函数获取的内容foriinrange(sheet1_ncols):sheet1_col_content=sheet1.col_values(i)print(f'sheet1第{i+1}列内容:{sheet1_col_content}')#结果sheet1第1列内容:['user','lili','zhangsan','lisi']sheet1第2列内容:['age',21.0,13.0,35.0]3按单元格获取内容print(f'sheet1第1行第2列内容:{sheet1.cell(0,1).value}')print(f'sheet1第2行第2列内容:{sheet1.cell_value(1,1)}')print(f'sheet1第1行第1列内容:{sheet1.row(0)[0].value}')#结果:sheet1第1行第2列内容:agesheet1第2行第2列内容:21.0sheet1第1行第1列内容:user5拓展内容1)表格中数据类型介绍0-empty,1-text,2-number,3-date,4-boolean,5-error表格sheet3中有如下内容:获取数据类型如下:sheet3=data.sheets()[2]row_type=sheet3.row_types(0)print(row_type)col_type=sheet3.col_types(1)print(col_type)cell_type=sheet3.cell_type(0,3)print(cell_type)#结果:array('B',[0,1,2,3,4,1])[1]32获取行内容时发现填写的2023年10月8日返回的是数字cell_content=sheet3.cell(0,3).valueprint(cell_content)#结果:45207.0原来excel表中的日期会被python根据一个时间基准计算出相差的的天数(1900-01-01和1904-01-01基准)解决方法:使用xlrd.xldate.xldate_as_datetime函数处理得到的数字,它会返回datetime对象,用strftime把它转化成指定格式的字符串。print(xlrd.xldate.xldate_as_datetime(cell_content,0).strftime("%Y/%m/%d"))结果:2023/10/08----感谢读者的阅读和学习,谢谢大家。共勉:东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”-----指水滴不断地滴,可以滴穿石头;-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-11 06:10 , Processed in 0.423692 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表