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

chr*_*izz 5 python string floating-point text-files

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

[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854, ....]
Run Code Online (Sandbox Code Playgroud)

Python代码:

v = string[string.index('['):].split(',')
for elem in v:
    new_list.append(float(elem))
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误:

ValueError: could not convert string to float: [2.974717463860223e-06
Run Code Online (Sandbox Code Playgroud)

为什么不能[2.974717463860223e-06转换为浮点数?

Tim*_*ker 16

你仍然[在你的"浮动"前面,这会阻止解析.

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

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

要么

>>> import ast
>>> b = ast.literal_eval(a)
>>> b
[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]
Run Code Online (Sandbox Code Playgroud)

  • @Akavall`eval`是不安全的,因为它会评估任意代码.`literal_eval`只会评估某些数据结构代码,例如list,dicts,bools和`None`. (6认同)

Abh*_*jit 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]
Run Code Online (Sandbox Code Playgroud)

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

  • 如果`json.loads`或`ast.literal_eval`不存在,这将是完成任务的最佳方法. (3认同)