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 = sheet.cell_value(1,5)     #取第2行第6列的值

print(type(cell_value),cell_value)      #打印超时时间的值

上述代码是读取图片中的excel,结果是 10.0,而我们需要的结果是10; 造成该问题的原因就是 xlrd模块 单元格为数字默认会转换为浮点数; 说说我的实际编码需求:如果为空就要给变量赋默认值 5 ,如果设置了值就用设置的整型值。

二、解决方法

  • 2.1 可以直接把excel中的该列设置格式为文本格式,该列读取的时候就为字符串,然后再如下处理:

cell_value = sheet.cell_value(1,5) 

if cell_value == '' : #如果为空就要给变量赋默认值 5 

     cell_value = 5 

else: 

     cell_value = int(cell_value)

  • 2.2 通过xlrd模块获取单元格的数据类型,判断类型后再进行处理:

cell = sheet.cell(1,5)                                      # 创建一个单元格对象 

#cell.ctype返回单元格值类型:0 empty,1 string,2 number,3 date,4 boolean,5 error 

if cell.ctype==2 and int(cell.value)==cell.value: #and后面为了防止该列为浮点数值时转为整型 

     cell_value = int(cell.value) 

elif cell.ctype==0: #如果为空就要给变量赋默认值 5 

     cell_value = 5

  • 2.3 通过 isinstance() 方法判断数据类型来进行判断处理:

cell_value = sheet.cell_value(1,5) 

cell_value = int(cell_value) if isinstance(cell_value,float) else 5 #isinstance判断

cell_value值的类型是否为浮点型 

print(cell_value)

以上三个实例代码小结:

  • 实例一从源头出发解决,只有设置excel格式就行,也好理解;
  • 实例二考虑的最为全面,教科书式的标准方法,考虑了单元格如果真为浮点型的特殊情况;
  • 实例三是我目前的场景需求原因,想了半天设计的一个方法,代码写起来比较优雅,其实还可以优化成一行

cell_value = int(sheet.cell_value(1,5)) if isinstance(sheet.cell_value(1,5),float) else 5

  • 通过这个小例子想让大家知道实现功能的方法很多,你只需要能通过一种完成效果就行
  • 笔者不急于给出大家一段实现代码的答案,而是啰嗦这么多,也是希望大家要学会代码编写的思考方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值