我正在使用openpyxl
从电子表格中读取值。这些值被读作浮点数,我不完全确定原因。
import openpyxl as opx
wb = opx.load_workbook(SKU_WORKBOOK_PATH, use_iterators=True, data_only=True)
ws = wb.worksheets[0]
for row in ws.iter_rows():
foo = str(int(row[1].internal_value))
这引发了错误:
ValueError: invalid literal for int() with base 10: '6978279.0'
通常,openpyxl读取整数值为int
,但这次它在浮点数中读取它作为字符串。在电子表格中,此单元格的值为6978279
。
我正在使用foo = str(int(float(foo)))
将其转换为我想要的字符串,从而按预期生成'6978279'
。我也可以做foo = foo[:-2]
,但这让我担心另一个单元格,可能被读作int
或更多的小数位,会让事情搞砸。
这感觉就像把我所拥有的东西捣碎成我想要的一种可怕,混乱的方式。是否有更多的pythonic方式来做到这一点?我是否以强迫浮动的方式阅读xlsx
?如果没有三重铸造,我怎么能这样做?
答案 0 :(得分:2)
如果你永远不会有像0.0
这样的小数,你str.rstrip
它会使6978279.0
6978279
从任何其他小数的末尾删除零不会改变它值1.12300
将为1.233
:
In [20]: "1.234200".rstrip("0.")
Out[20]: '1.2342'
In [21]: "1.0".rstrip("0.")
Out[21]: '1'
如果你可以有0.0等...你可以在字符串为空时捕获:
In [22]: s = "0.0".rstrip("0.") or "0"
答案 1 :(得分:0)
如果需要返回int或float(可能是算术运算),可以使用如下函数:
def strip_num_or_float(value):
try:
value= int(value)
except TypeError:
value = value.normalize()
return value