python应用问题01-->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:          #与的后面是为了防止把该列真实为浮点数的值转为整型
    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 
  • 通过这个小例子想让大家知道实现功能的方法很多,你只需要能通过一种完成效果就行
  • 笔者不急于给出大家一段实现代码的答案,而是啰嗦这么多,也是希望大家要学会代码编写的思考方式

原文地址:https://www.cnblogs.com/dream66/p/12528384.html

时间: 2024-08-26 21:19:48

python应用问题01-->xlrd默认将整型转为浮点型的相关文章

010整型、浮点型、字符串型、列表型、字典型、布尔型

整型.浮点型.字符串型.列表型.字典型.布尔型 一.整型(int) 1.1作用 表示人的年龄.各种号码.级别 1.2定义 age = 18 # age=int(18) print(id(age)) print(type(age)) print(age) 输出结果: 4530100848 <class 'int'> 18 1.3 如何用 加减乘除.逻辑判断(大于.小于) 二.浮点型(float) 2.1 作用 表示身高.体重.薪资 2.2 定义 salary = 2.1 # salary=flo

C++整型、浮点型与字符串型相符转换

前言 整型.浮点型与字符串的相互转换可以用自带的函数来实现,本人使用的是vs2015,所以下面的函数需要改变一下,请看下面的总结. 正文 一.整型转字符串型 1. int转为字符串 itoa(int _Value, char *_Buffer, int _Radix); 需改为_itos_s(int _Value, char *_Buffer, size_t _BufferCount, int _Radix); _Radix:表示进制,若十进制则Radix为10 _BufferCount:存储的

Python数据格式:%s字符串,%d整型,%f浮点型

格式化符%%% 百分号标记 #就是输出一个%%c 字符及其ASCII码%s 字符串%d 有符号整数(十进制)%u 无符号整数(十进制)%o 无符号整数(八进制)%x 无符号整数(十六进制)%X 无符号整数(十六进制大写字符)%e 浮点数字(科学计数法)%E 浮点数字(科学计数法,用E代替e)%f 浮点数字(用小数点符号)%g 浮点数字(根据值的大小采用%e或%f)%G 浮点数字(类似于%g)%p 指针(用十六进制打印值的内存地址)%n 存储输出字符的数量放进参数列表的下一个变量中 %s 字符串

Python 数值类型(整型、长整型、浮点型、复数型)

一.整型 In [1]: a = 123 # 定义整数类型 In [2]: type(a) # 查看数据类型 Out[2]: int -2147483648 —— 2147483647 # 整型的取值范围,如果超过了这个范围则成为长整型 二.长整型 In [7]: a = 123456789123456789123456789 # 定义长整型 In [8]: type(a) # 查看数据类型 Out[8]: long In [9]: a # 长整型后面会带有字母(l或L)以标识这是长整型 Out

6、整型与浮点型

1.数值型 整型 tinyint:占据空间1字节,储存范围-128——127,0——255 smallint:2个字节 mediuint:3个字节 Int:4个字节 bigint:8个字节 小数 浮点型:float(M,D) M叫“精度”--->代表总位数,D叫“标度”,代表小数位(小数右边的位数) 定点型:decimal(M,D) 长度不确定,是变长类型,把整数部分和小数部分,分开存储,比float精确. 1.1.学习tinyint的参数: (M) unsigned zerofill unsi

整数、长整型、浮点型、字符串

如: 18.73.84 每一个整数都具备如下功能: int 二.长整型 可能如:2147483649.9223372036854775807 每个长整型都具备如下功能: long 三.浮点型 如:3.14.2.88 每个浮点型都具备如下功能: float 四.字符串 如:'wupeiqi'.'alex' 每个字符串都具备如下功能: str  

js类型转换-字符串转整型、浮点型方法、强制类型转换等

1. 转换函数: js 提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法, 这两个函数才能正确运行:对其他类型返回的都是NaN(Not a Number).这两个转换函数的结果都是将String数据类型转化为Number. 在 判断字符串是否是数字值前,parseInt()和parseFloat()都会仔细分析该字符串.parseInt()方法首先查看位置0处的 字符,判断它是否是个有效数字:如果不是,

JS 整型,浮点型转化为字符型

JS 数据类型转换 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行:对其他类型返回的都是NaN(Not a Number). 在判断字符串是否是数字值前,parseInt()和parseFloat()都会仔细分析该字符串.parseInt()方法首先查看位置0处的 字符,判断它是否是个有效数

整型与浮点型相互转换的相关问题

1.当整型值转换float型值时,也可能损失数度 2.当float型值转换为整型值时,那么其结果是不可预料的 具体可以理解如下: (1)当整型值转换float型值时,也可能损失数度 假设 float f = 100: 那么f在内存中可能是99.99999,处于 浮点数的存储结构,不能达到100%的精度,只是非常的逼近你的值 (2)float可以用科学技术法,如float f = 1.1e33;这个就没办法强转给整形 3.计算机发现目标数据类型错误,不读取,归零处理.下列结果为0 int main