有没有办法克服下一个问题:在Python中使用xlrd包时,excel文件中的值'1'显示为'1.0'。
现在,我正在编写一个应该能够注意到差异的脚本,我使用这个值作为索引,所以 '1' 和 '1.0' 是完全不同的索引,但我找不到任何方法来克服这个问题。
有什么我可以做的吗?
谢谢。
是的,这是xlrd的常见问题。当数字实际上是int类型时,您通常需要转换为 int,而其余时间则需要将其作为浮点数本身。
因此,在大多数情况下,这是一个效果很好的东西:
int_value = int(float_value)
if float_value == int_value:
converted_value = int_value
else:
converted_value = float_value
例子
>>> a = 123.0
>>> type(a)
<type 'float'>
>>> b = int(a)
>>> a == b
True
我在使用 xlrd 解析 excel 文件时遇到了同样的问题。我发现的最简单的方法是将已知的浮点值转换为整数。除非您碰巧遇到不知道要解析的字段的数据类型的情况。
在这种情况下,您可以尝试转换为 int 并捕获错误。例如:
try:
converted_int = int(float_number)
except Error:
//log or deal with error here.
您可以使用将数字转换为 int int(input_number)
。使用isinstance()
方法的想法也有帮助。你可以使用类似的东西
import xlrd
book = xlrd.open_workbook('input.xlsx')
sheet = book.sheet_by_index(0)
data = []
for row in range(1, sheet.nrows): # skip the header
l = []
for column in range(0, sheet.ncols):
val = sheet.cell(row, column).value
if isinstance(val,float):
l.append(int(val))
else:
l.append(val)
data.append(l)
print(data) # [['id101', 1], ['id102', 2], ['id103', 3]]
用于int(some_number)
将数字转换为integer
. 您可以从这里查看 int 函数的文档:BIF
希望这会对您有所帮助:)