【问题标题】:How to convert from float to int to string? invalid literal for int() with base 10: 'x'如何从浮点数转换为整数到字符串?以 10 为底的 int() 的无效文字:'x'
【发布时间】:2019-04-02 18:08:45
【问题描述】:

如何将float转为int转为string?

with open(DATA_DIR+'/test.csv', 'r') as inp:
reader = csv.DictReader(inp, delimiter=',',fieldnames = ['Id', 'Target'])
for row in csv.reader(inp):
text_file.write("Text "+str(int(row[1])))

错误:ValueError: invalid literal for int() with base 10: '323.0'

【问题讨论】:

  • int(323.0) 没有意义,因为其中有一个.int(float('323.0')) 会更好,因为float 准备在您的str 评估中处理逗号/点,int 不是

标签: python python-3.x string csv


【解决方案1】:

编辑:CSV 解析器已经在读取您尝试转换为字符串的数据。该字符串具有不会转换为 int 的小数点值。它会将其转换为浮点数。

这里有两种方法:

  1. 只需拆分字符串并使用整数部分
  2. 在你的例子中做text_file.write('Text {:.0f}'.format(float(row[1]))

使用第二种方法,您基本上将其转换为浮点数,此后您不关心小数点右侧的任何内容。所以.0f 表示您不需要小数点后的任何内容,包括.。可以在下面粘贴的链接中了解有关此格式的更多信息。

随着您深入挖掘,您应该继续使用type() 来识别传入的数据,然后再决定如何处理它。

原件: 您无需转换数据即可达到您想要的效果。最后,您希望将文件作为字符串写入文件。如果你从 csv 得到的是一个浮点数,那么你可以简单地将你的字符串格式化为

write_line = 'Text {:06.2f}'.format(row[1])
text_file.write(write_line)

当然,你可以压缩这两行。 在 python 的文档中有更多信息 - https://docs.python.org/3/tutorial/inputoutput.html

【讨论】:

  • ValueError:“str”类型对象的未知格式代码“f”
  • 好的,然后打印变量的类型以及用于调试目的的内容。 print(type(row[1]))
  • 输出:<class 'str'>
  • 所以row[1] 已经是一个字符串。直接使用它,而不是进一步转换两次。
  • 118.0 但我只想保存 118
【解决方案2】:
x=Decimal(row[1]).normalize()
text_file.write(x)

【讨论】:

  • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请编辑您的答案以添加解释并说明适用的限制和假设。
【解决方案3】:

可能看起来 row[1] 没有任何数值。你能具体说明它将持有什么吗? 在执行 int() 函数之前尝试打印 row[i] 并查看它持有的值。

【讨论】:

  • 第一行不好。但我还是有问题。
  • 118.0 我想保存为 118
  • 打印 row[i] 不一定会澄清数据,因为数据已经是 str。如果需要找到type
猜你喜欢
  • 2019-12-09
  • 2018-12-12
  • 1970-01-01
  • 2015-11-05
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
相关资源
最近更新 更多