2

有没有办法克服下一个问题:在Python中使用xlrd包时,excel文件中的值'1'显示为'1.0'。

现在,我正在编写一个应该能够注意到差异的脚本,我使用这个值作为索引,所以 '1' 和 '1.0' 是完全不同的索引,但我找不到任何方法来克服这个问题。

有什么我可以做的吗?

谢谢。

4

4 回答 4

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
于 2013-07-15T08:54:43.390 回答
0

我在使用 xlrd 解析 excel 文件时遇到了同样的问题。我发现的最简单的方法是将已知的浮点值转换为整数。除非您碰巧遇到不知道要解析的字段的数据类型的情况。

在这种情况下,您可以尝试转换为 int 并捕获错误。例如:

try:
    converted_int = int(float_number)
except Error:
    //log or deal with error here.
于 2013-07-15T05:06:32.787 回答
0

您可以使用将数字转换为 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]]
于 2020-02-11T13:23:28.817 回答
0

用于int(some_number)将数字转换为integer. 您可以从这里查看 int 函数的文档:BIF 希望这会对您有所帮助:)

于 2016-03-16T16:57:37.110 回答