记一次xlrd读取excel为none的解决
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次xlrd读取excel为none的解决相关的知识,希望对你有一定的参考价值。
参考技术A 需求是这样的,在linux环境下监控一个文件夹中的文件增删情况,发现新的excel文件进行python解析成xml文件后存放于另外的文件夹。在Windows上进行编码测试均OK,但是在linux上进行测试时发现监控脚本发现文件新增后调用解析的脚本来解析一直报
AttributeError: 'NoneType' object has no attribute 'sheet_by_index',最终通过加打印发现读取到的文件大小为0bytes。怀疑监控发现新增时其实文件并未完全上传到目录中,导致解析到Book对象为none,最终导致报没有属性sheet_by_index。
初步解决方案:
延迟解析
最终的解决方案应该是监控到文件真正上传完毕后,触发解析脚本,完成解析,目前先对问题原因做如此记录。
python+selenium+new——xlrd库——读取excel文件——xlsx结尾为示例
pip install xlrd #j导入这个库
import xlrd book = xlrd.open_workbook("C:\\\\Users\\\\del\\\\Desktop\\\\Book1.xlsx") sheet_name = book.sheet_names()[0] #获取指定索引的sheet的名字 print(sheet_name) #Sheet1 sheet0 = book.sheet_by_index(0) #通过sheet索引获取sheet对象 print(sheet0.nrows) #总行数:2 print(sheet0.ncols) #总列数:5 print(sheet0.row_values(0)) #获取第一行数据:[\'身份证号\', \'姓名\', \'学号\', \'缴费项目\', \'缴费金额\'] print(sheet0.row_values(1)) #获取第二行数据:[\'33038119890412221X\', \'潘颂哲\', \'33038119890412221X\', \'2020年2月份党费\', 14.0] print(sheet0.col_values(0)) #获取第一列的数据:[\'身份证号\', \'33038119890412221X\'] print(sheet0.col_values(1)) #获取第二列的数据:[\'姓名\', \'潘颂哲\'] print(sheet0.col_values(2)) #获取第三列的数据:[\'学号\', \'33038119890412221X\'] print(sheet0.col_values(3)) #获取第四列的数据:[\'缴费项目\', \'2020年2月份党费\'] print(sheet0.col_values(4)) #获取第五列的数据:[\'缴费金额\', 14.0] #通过cell的位置坐标获取指定cell的值: print(sheet0.cell_value(0,0)) #获取第一行第一列的数据:身份证号 print(sheet0.cell_value(0,1)) #获取第一行第二列的数据:姓名 print(sheet0.cell_value(1,4)) #获取第二行第五列的数据:14.0
执行结果:
Sheet1
2
5
[\'身份证号\', \'姓名\', \'学号\', \'缴费项目\', \'缴费金额\']
[\'33038119890412221X\', \'潘颂哲\', \'33038119890412221X\', \'2020年2月份党费\', 14.0]
[\'身份证号\', \'33038119890412221X\']
[\'姓名\', \'潘颂哲\']
[\'学号\', \'33038119890412221X\']
[\'缴费项目\', \'2020年2月份党费\']
[\'缴费金额\', 14.0]
身份证号
姓名
14.0
以上是关于记一次xlrd读取excel为none的解决的主要内容,如果未能解决你的问题,请参考以下文章
python使用xlrd读取excel数据时,整数变小数的解决办法