Python错误:无法将字符串转换为float

时间:2012-04-16 14:48:55

标签: python string floating-point text-files

我有一些Python代码可以从文本文件中提取字符串:

[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854, ....]

Python代码:

v = string[string.index('['):].split(',')
for elem in v:
    new_list.append(float(elem))

这会出错:

ValueError: could not convert string to float: [2.974717463860223e-06

为什么[2.974717463860223e-06无法转换为浮点数?

5 个答案:

答案 0 :(得分:16)

你仍然可以在你的"浮动"前面找到[这会阻止解析。

为什么不使用合适的模块呢?例如:

>>> a = "[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]"
>>> import json
>>> b = json.loads(a)
>>> b
[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]

>>> import ast
>>> b = ast.literal_eval(a)
>>> b
[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]

答案 1 :(得分:5)

您可以执行以下操作将您从文件中读取的字符串转换为float

列表
>>> instr="[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]"
>>> [float(e) for e in instr.strip("[] \n").split(",")]
[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]

你的代码失败的原因是,你没有剥离字符串中的'['。

答案 2 :(得分:3)

您正在捕捉第一个括号,将string.index("[")更改为string.index("[") + 1

答案 3 :(得分:1)

这将为您提供一个浮动列表,而无需额外的导入等。

s = '[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]'
s = s[1:-1]
float_list = [float(n) for n in s.split(',')]


[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]

答案 4 :(得分:0)

v = string[string.index('[') + 1:].split(',')

index()返回给定字符的索引,以便'['[:]返回的序列中包含{{1}}。