python使用xlrd讀取excel資料時,整數和日期變小數的解決辦法
阿新 • • 發佈:2019-01-10
想讓excel資料返回一個字串字典list,造了一個excel。資料如下:
用程式碼讀取後發現整型和日期變成了小數(123456變成了123456.0,2017/5/20 5:20變成了42875.22222222222):
有個比較簡單的解決辦法就是在數字和日期的單元格內容前加上一個英文的逗號即可。如果資料比較多,也可以批量加英文逗號的字首(網上都有方法)。
再次執行程式碼就正確了:
這種比較適合資料量較少的時候,如果資料量比較多,還是建議通過程式程式碼判斷單元格內容的ctype來解決!
下面是我通過網上找的例子修改的程式碼。初學python沒幾天,有不足之處希望留言指正,大家共同學習!
注意:該例子沒有對第一行的資料進行處理。第一行資料作為key,其它行作為value,依次返回每行資料。
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 = sheet.nrows #行數 first_row_values = sheet.row_values(0) # 第一行資料 list = [] num = 1 for row_num in range(1, nrows): row_values = sheet.row_values(row_num) if row_values: str_obj = {} for i in range(len(first_row_values)): ctype = sheet.cell(num, i).ctype cell = sheet.cell_value(num, i) if ctype == 2 andcell % 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: cell = True if cell == 1 else False str_obj[first_row_values[i]] = cell list.append(str_obj) num = num + 1 return list