有没有办法克服下一个问题: 在Python中使用xlrd软件包时,excel文件中的值“1”显示为“1.0”。
现在,我正在编写一个应该能够注意到差异的脚本,我使用这个值作为索引,所以'1'和'1.0'是完全不同的索引,但我无法找到任何方法来克服这个问题。
我能做些什么吗?
感谢。
答案 0 :(得分:0)
使用xlrd解析excel文件时遇到了同样的问题。我发现最简单的路线就是将已知的浮点值转换为整数。除非您碰巧遇到这种情况,否则您不知道要解析的字段的数据类型。
在这种情况下,您可以尝试转换为int,并捕获错误。例如:
try:
converted_int = int(float_number)
except Error:
//log or deal with error here.
答案 1 :(得分:0)
是的,这是 xlrd 的常见问题。 你通常需要转换为int,当数字实际上是 int 类型时,其余时间你需要它作为 float 本身。
所以这里的东西在大多数情况下效果很好:
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
答案 2 :(得分:0)
使用int(some_number)
将数字转换为integer
。
您可以从此处查看int函数的文档:BIF
希望这会对你有所帮助:)。
答案 3 :(得分:0)
您可以使用int(input_number)
将数字转换为int。
使用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]]