python - 如何将 float 转换为没有小数位的字符串

标签 python openpyxl

我正在使用 openpyxl 从电子表格中读取值。这些值被读取为 float ,我不完全确定为什么。

import openpyxl as opx
wb = opx.load_workbook(SKU_WORKBOOK_PATH, use_iterators=True, data_only=True)
ws = wb.worksheets[0]
for row in ws.iter_rows():
  foo = str(int(row[1].internal_value))

这是抛出错误:

ValueError: invalid literal for int() with base 10: '6978279.0'

通常,openpyxl 将整数值读取为 int,但这次它以 float 转换为字符串读取它。在电子表格中,此单元格的值为 6978279

我正在使用 foo = str(int(float(foo))) 将其转换为我想要的字符串,这会按预期生成 '6978279'。我也可以做 foo = foo[:-2],但这让我担心另一个可能被读作 int 或有更多小数位的单元格会搞砸事情了。

这感觉就像是一种糟糕、困惑的方式,将我拥有的东西混合成我想要的东西。有没有更pythonic的方法来做到这一点?我是否以强制 float 的方式阅读 xlsx?如果没有三重类型转换,我怎么能做到这一点?

最佳答案

如果你永远不会有像 0.0 这样的小数,你可以 str.rstrip 它将使 6978279.0 6978279 删除任何其他小数末尾的零都不会改变其值 1.12300 将是 1.233:

In [20]: "1.234200".rstrip("0.")
Out[20]: '1.2342'

In [21]: "1.0".rstrip("0.")
Out[21]: '1'

如果你可以有 0.0 等..你可以在字符串为空时捕获:

 In [22]: s = "0.0".rstrip("0.") or "0"

关于python - 如何将 float 转换为没有小数位的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38234130/

相关文章:

python - 无法从 'save_virtual_workbook' 导入名称 'openpyxl.writer.excel'

Python numpy 保留已排序二维数组的索引列表

python - 检查另一个数据框中是否存在多行

python - 如果值不在 self._dict : TypeError: unhashable type: 'StyleProxy' in python

python - 使用 openpyxl 搜索一列中的单元格,然后打印出该相关单元格的行

python - 无法在 openpyxl 中导入工作簿

python - Python Flask中的整数错误

python - SQlite UPDATE WHERE语法错误

python - 从列表创建 Pandas 数据框

python - Tkinter 和 openpyxl 错误没有这样的文件或目录 ''