无法从桌面上看到的Excel中读取数据

时间:2014-03-07 06:52:29

标签: python python-2.7 xlrd

我正在研究excel workbook。我正在使用python脚本来操作workbook。但有两个问题:

1)有些细胞具有integer值。当我读取这些值并将读取值放入报告文件(.txt)时,它会在.0附加数字。例如。如果有值6,则在不应该这样做的情况下给出6.0。我已经读过excel中没有integer。尽管如此,我有1000个参数,因此,我无法使用某些integer函数将所有参数直接转换为python,因为这可能会转换实际上float的值。

2)当我正在阅读boolean正确和错误时,它给我1和0.我想得到我在excel工作簿中看到的任何text桌面。我不希望任何类似的转换。

我在xlrd中使用excel进行python次操作。
请告诉我应该怎么做才能解决这个问题?
注意:我的Excel工作表包含100多张,我不能用“1和0”等修改“true或false”

2 个答案:

答案 0 :(得分:2)

对于布尔问题,您可以测试ctype:

for rx in range(ws.nrows):
        for cx in range(ws.ncols):
            print ws.cell(rx,cx).value, ws.cell(rx,cx).ctype

如果excel原始单元格为“TRUE”FALSE“ctype值为4

答案 1 :(得分:2)

xlrd给你所有的数字作为浮点数,你的布尔值作为整数。你如何打印它们纯粹是一个蟒蛇问题。

我知道你已经知道哪些单元格包含布尔值。 (如果您没有,请查看Massimo Fuccillo answer中显示的单元格ctype - 有关详细信息,请参阅下面@ JohnY的评论。)您可以只需打印True而不是False,即可将布尔单元格打印为bool(var)var

>>> var = 1
>>> print bool(var)
True

写入文件时,它将按预期输出为字符串'True'(resp。'False')。

由于Excel不区分整数和浮点数,我们假设integer表示任何小数部分为零的数字。当python打印一个浮点数时,它会添加.0以保留它是浮点数的信息。

最简单的解决方案是,如果使用"%g"

格式化输出数字,则可以取消此操作
>>> "%g" % 6.0
'6'

但是,默认情况下"%g"会将实数舍入为六位有效数字(尽管您可以指定不同的精度)。

>>> "%g" % 2500.03
'2500.03'
>>> "%g" % 2500.003
'2500'

如果您自己检测积分值并将其打印出来,那么它会更安全:

if int(var) == var:
    print int(var)
else:
    print var

我建议这样做。