我正在研究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”
答案 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
我建议这样做。