python使⽤xlrd读取excel数据时,整数和⽇期变⼩数的解决办
法
想让excel数据返回⼀个字符串字典list,造了⼀个excel。数据如下:
⽤代码读取后发现整型和⽇期变成了⼩数(123456变成了123456.0,2017/5/20 5:20变成了42875.22222222222):
有个⽐较简单的解决办法就是在数字和⽇期的单元格内容前加上⼀个英⽂的引号即可。如果数据⽐较多,也可以批量加英⽂引号的前缀(⽹上都有⽅法)。
再次运⾏代码就正确了:
这种⽐较适合数据量较少的时候,如果数据量⽐较多,还是建议通过程序代码判断单元格内容的ctype来解决!
下⾯是我通过⽹上的例⼦修改的代码。初学python没⼏天,有不⾜之处希望留⾔指正,⼤家共同学习!
注意:该例⼦没有对第⼀⾏的数据进⾏处理。第⼀⾏数据作为key,其它⾏作为value,依次返回每⾏数据。
# pip install xlrd 安装xlrd
import xlrd
from datetime import datetime
from xlrd import xldate_as_tuple
def get_excel_data(file): # 传⼊⽂件路径字符串即可,例如:get_excel_data('account.xlsx') workbook = xlrd.open_workbook(file)
sheet = workbook.sheets()[0] # 读取第⼀个sheet
nrows = ws # ⾏数
first_row_values = w_values(0) # 第⼀⾏数据
list = []
num = 1
for row_num in range(1, nrows):
row_values = w_values(row_num)
if row_values:
str_obj = {}
for i in range(len(first_row_values)):
ctype = ll(num, i).ctype
cell = ll_value(num, i)
if ctype == 2 and cell % 1 == 0.0: # ctype为2且为浮点
cell = int(cell) # 浮点转成整型
cell = str(cell) # 转成整型后再转成字符串,如果想要整型就去掉该⾏
elif ctype == 3:
date = datetime(*xldate_as_tuple(cell, 0))
cell = date.strftime('%Y/%m/%d %H:%M:%S')
elif ctype == 4:
python怎么读入excel
cell = True if cell == 1 else False
str_obj[first_row_values[i]] = cell
list.append(str_obj)
num = num + 1
return list
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论