Python xlrd包问题

时间:2013-07-15 04:58:31

标签: python xlrd

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

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

我能做些什么吗?

感谢。

4 个答案:

答案 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]]