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
· 透過這個小例子想讓大家知道實現功能的方法很多,你只需要能透過一種完成效果就行
· 筆者不急於給出大家一段實現程式碼的答案,而是囉嗦這麼多,也是希望大家要學會程式碼編寫的思考方式
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69940641/viewspace-2911215/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【譯】將字元轉換為雙精度浮點型字元
- 加了強型別如何將請求引數轉為整型型別
- 將字串陣列轉換為浮點數陣列字串陣列
- C語言中寫一個程式將浮點型轉化成字元型輸出C語言字元
- 浮點數轉換為String字串(可設定精度)方法字串
- C語言 int,float,double整型和浮點型資料在相互運算時bug原因C語言
- 轉換成浮點數
- Python將經緯度資料轉換成浮點資料Python
- arange浮點型別資料型別
- Java 浮點到字串轉換Java字串
- Python基本資料型別之浮點型Python資料型別
- 將WordPress站點轉換為JoomlaOOM
- mysql浮點型別是什麼MySql型別
- [C語言] 浮點型儲存C語言
- java浮點型別案例介紹Java型別
- Laravel 自動轉換長整型雪花 ID 為字串Laravel字串
- hex轉浮點數線上轉換工具
- 什麼是整型型別?Python整型詳細介紹型別Python
- pd.to_datetime方法將字串轉為datetime型字串
- C#快速入門教程(9)——浮點數、Decimal型別和數值型別轉換C#Decimal型別
- 單精度浮點數轉化為10進位制數的原理
- 如何在 Go 中將 int 型別轉為字串Go型別字串
- while迴圈補充、for迴圈、range關鍵字、內建方法之整型、內建方法之浮點型、內建方法之字串While字串
- c中int型和浮點型的格式話輸出
- python中怎麼建立浮點型變數?Python變數
- Java之BigDecimal(存任意精度的浮點型)JavaDecimal
- elixir小技巧:把浮點數轉換為 IEEE754 的 binary 形式
- 為什麼計算機對浮點型數字計算存在誤差計算機
- 浮點數線上轉hex計算工具
- 第11章 使用類——型別轉換(二)將自定義型別轉換為內建型別型別
- Java中將 Jackson JsonNode 轉換為型別化集合JavaJSON型別
- win10怎麼將potplayer設定為預設播放器_win10如何將potplayer設定為預設播放器Win10播放器
- 位元組陣列轉浮點數線上轉換器陣列
- 6-1 數字字串轉化為整型陣列 (10分)字串陣列
- Java整型資料型別(詳解)Java資料型別
- Python基本資料型別之整型Python資料型別
- 預設型 DP
- 預設型DP