人在江湖~

做一个快乐学习的小透明~~~

导航

Python系列(5)——解决xlrd读取excel的.xls文件时读取出的数据默认是浮点型的问题

 1 # -*-coding:utf-8 -*-
 2 # 在使用xlrd读取excel的.xls类型文件时,读取的数据默认为浮点型,包括对整数型/时间/布尔值...类型数据的读取,
 3 # 因此在按行或列的方式读取sheet数据时进行数据类型转换
 4 import xlrd
 5 read_book = xlrd.open_workbook(r'C:\Users\Administrator\Desktop\test.xls')  # 打开文件


6 # 1.读取sheet对象 7 work_sheet_index = read_book.sheet_by_index(0) # 通过sheet索引获得sheet对象 8 # 2.获取指定sheet基本信息 9 sheet_name = work_sheet_index.name # 获取索引为0的sheet姓名 10 sheet_row = work_sheet_index.nrows # 获取该sheet的总行数 11 sheet_col = work_sheet_index.ncols # 获取该sheet的总列数 12 # 3.按行或列的方式获得sheet数据 13 for i in range(sheet_row): 14 print(work_sheet_index.row_values(i)) # 每一行的数据用一个列表表示,但读出的数据默认为浮点型 15

16 # 以下代码是对用xlrd读取excel数据时默认是浮点型数据的转换代码
17 import datetime
18 import  numpy as np
19 list_cell = []
20 # ②dict_key = []
21 for i in range(sheet_row):
22     list_during = []
23     # ①list_during = {}
24     for j in range(sheet_col):
25         cell_type = work_sheet_index.cell(i, j).ctype  # 表格的数据类型
26         # 判断python读取的返回类型  0 --empty,1 --string, 2 --number(都是浮点), 3 --date, 4 --boolean, 5 --error
27         cell = work_sheet_index.cell_value(i, j)   # 获取单元格的值
28         if cell_type == 2 and cell % 1 == 0.0:
29             cell = int(cell)   # 浮点转成整型
30         elif cell_type == 3:
31             date = datetime.datetime(*xlrd.xldate_as_tuple(cell, 0))   # 第一个参数是要处理的单元格,第二个参数是时间基准0代表以1900-01-01为基准
32             cell = date.strftime('%Y/%m/%d')   # 转为字符串
33         elif cell_type == 4:
34             if cell == 1:
35                 cell = True
36             else:
37                 cell = False
38         """
39         若想变成key对应value,即大列表里是字典且每个key列名都对应cell单元格值
40         ①list_during={}变成空字典
41         ②增加dict_key = []
42         ③将i=0的第一行设为key值并增加相应的if条件
43         ④最后将字典append列表中时也增加if条件,第一个字典即列名不单独作为一个元素放到列表中

44 """ 45 # ③if i == 0: 46 # dict_key.append(cell) # 第一行为列名即为key 47 # else: 48 # list_during[dict_key[j]] = cell 49 list_during.append(cell) 50 # ④if i == 0: 51 # del list_during 52 # else: 53 # list_cell.append(list_during) 54 list_cell.append(list_during) 55 56 print(np.array(list_cell)) # 直接使用np.array()进行列表换行

 

posted on 2020-07-21 16:10  人在江湖~  阅读(1867)  评论(0编辑  收藏  举报