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:    #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 
  • 通過這個小例子想讓大家知道實現功能的方法很多,你只需要能通過一種完成效果就行
  • 筆者不急於給出大家一段實現代碼的答案,而是啰嗦這么多,也是希望大家要學會代碼編寫的思考方式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM