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

Gau*_*nga 6 python xlrd python-2.7

我正在努力excel workbook.我正在使用python脚本来操作workbook.但有两个问题:

1)有些细胞具有integer价值.当我读取该值并将读取值放入报告文件(.txt)时,它将附加.0数字.例如.如果有值6,则在不应该这样做时给出6.0.我读过integerexcel中没有任何内容.仍然,我有1000个参数,因此,我不能直接将所有参数转换为integer使用某些python函数,因为这可能会转换实际上float也是的值.

2)当我读取booleanTRUE和FALSE时,它给我1和0.我想得到text我在桌面上的excel工作簿中看到的任何内容.我不希望任何类似的转换.

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

ale*_*xis 2

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

我假设您已经知道哪些单元格包含布尔值。(如果不这样做,请检查Massimo Fuccillo 的答案ctype中所示的单元格- 有关详细信息,请参阅下面@JohnY 的评论。)您可以通过简单地打印而不是打印布尔单元格为 and :TrueFalsebool(var)var

>>> var = 1
>>> print bool(var)
True
Run Code Online (Sandbox Code Playgroud)

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

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

最简单的解决方案是如果您使用“%g”格式化输出数字,则抑制这种情况:

>>> "%g" % 6.0
'6'
Run Code Online (Sandbox Code Playgroud)

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

>>> "%g" % 2500.03
'2500.03'
>>> "%g" % 2500.003
'2500'
Run Code Online (Sandbox Code Playgroud)

因此,如果您自己检测整数值并相应地打印出来,会更安全:

if int(var) == var:
    print int(var)
else:
    print var
Run Code Online (Sandbox Code Playgroud)

我建议这样做。