xlrd默认将整型转为浮点型

前言
学习这件事不在乎有没有人教你 , 最重要的是在于你自己有没有觉悟和恒心 。 ——法布尔
快夜深人静 , 窗外蛙声一遍 , 把这篇写完分享给大家!
【xlrd默认将整型转为浮点型】一、问题来由
·1.1 问题现象:笔者在编写一段读取excel数据的代码 , excel中包含整型数据 , 如下图:
图中 定位值 有很低概率是整型 , 超时时间 可填(整型)或 不可填(空字符串)
·1.2 简单读取代码:
import xlrd
workbook = xlrd.open_workbook('page_element_infos.xlsx')
sheet = workbook.sheet_by_index(0)
cell_value = https://mparticle.uc.cn/api/sheet.cell_value(15) #取第2行第6列的值
print(type(cell_value)cell_value) #打印超时时间的值
上述代码是读取图片中的excel , 结果是 10.0 , 而我们需要的结果是10; 造成该问题的原因就是 xlrd模块 单元格为数字默认会转换为浮点数; 说说我的实际编码需求:如果为空就要给变量赋默认值 5, 如果设置了值就用设置的整型值 。
二、解决方法
·2.1 可以直接把excel中的该列设置格式为文本格式 , 该列读取的时候就为字符串 , 然后再如下处理:
cell_value = https://mparticle.uc.cn/api/sheet.cell_value(15)
if cell_value =https://mparticle.uc.cn/api/='' : #如果为空就要给变量赋默认值 5
cell_value = https://mparticle.uc.cn/api/5
else:
cell_value = https://mparticle.uc.cn/api/int(cell_value)
·2.2 通过xlrd模块获取单元格的数据类型 , 判断类型后再进行处理:
cell = sheet.cell(15) # 创建一个单元格对象
#cell.ctype返回单元格值类型:0 empty1 string2 number3 date4 boolean5 error
if cell.ctype==2 and int(cell.value)==cell.value: #and后面为了防止该列为浮点数值时转为整型
cell_value = https://mparticle.uc.cn/api/int(cell.value)
elif cell.ctype==0: #如果为空就要给变量赋默认值 5
cell_value = https://mparticle.uc.cn/api/5
·2.3 通过 isinstance() 方法判断数据类型来进行判断处理:
cell_value = https://mparticle.uc.cn/api/sheet.cell_value(15)
cell_value = https://mparticle.uc.cn/api/int(cell_value) if isinstance(cell_valuefloat) else 5 #isinstance判断
cell_value值的类型是否为浮点型
print(cell_value)
以上三个实例代码小结:
·实例一从源头出发解决 , 只有设置excel格式就行 , 也好理解;
·实例二考虑的最为全面 , 教科书式的标准方法 , 考虑了单元格如果真为浮点型的特殊情况;
·实例三是我目前的场景需求原因 , 想了半天设计的一个方法 , 代码写起来比较优雅 , 其实还可以优化成一行
cell_value = https://mparticle.uc.cn/api/int(sheet.cell_value(15)) if isinstance(sheet.cell_value(15)float) else 5
·通过这个小例子想让大家知道实现功能的方法很多 , 你只需要能通过一种完成效果就行
·笔者不急于给出大家一段实现代码的答案 , 而是啰嗦这么多 , 也是希望大家要学会代码编写的思考方式
推荐阅读
- 南半球首个暗物质探测器:建在废弃的金矿中,将解开宇宙的秘密
- 联盟将出台“杜兰特条款”,杜绝球星为所欲为!蔡老板恶心阿杜送其远赴加拿大!
- 直接采集空气中的碳,将如何影响能源明天?
- 猞猁真是“屠狼高手”吗?它们是如何将狼群“断子绝孙”的?
- 全球高温愈演愈烈,但冬季却会更冷?“三重”拉尼娜或将形成
- 月球样本开始处理,阿波罗是真是假?几十年的争论将大白
- 打算卖车的注意了,一年内卖车不能超过两辆,将于年底实施!
- 火箭狮子大开口!多笔交易被拒绝,17+10猛将只能替补!
- 仅需1枚,就足以将全世界毁灭!钴弹到底有多可怕?
- 全球高温愈演愈烈,但冬季却会更冷?“三重”拉尼娜可能将形成