2012-04-16 320 views
5

我有一個拉弦了一個文本文件的一些Python代碼: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不能轉換爲浮點數?

+7

你看到'['你的錯誤信息? – 2012-04-16 14:53:40

回答

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] 
+4

+1:'literal_eval'是要走的路。 – 2012-04-16 14:57:52

+0

爲什麼不只是b = eval(a)? – Akavall 2012-04-16 15:04:37

+6

@Akavall'eval'是不安全的,因爲它會評估任意代碼。 'literal_eval'只會評估某些數據結構代碼,如列表,字典,布爾和「無」。 – 2012-04-16 15:06:48

3

你拍攝第一支架,改變給定字符的string.index("[")string.index("[") + 1

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

index()回報指數,讓'['包含在由[:]返回序列。

5

你可以做以下的字符串,您從文件中讀取到浮動

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

原因的列表轉換代碼是失敗的是,你並沒有剝離字符串中的'[''。

+3

如果'json.loads'或'ast.literal_eval'不存在,這將是完成任務的最佳方式。 – 2012-04-16 14:58:22

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] 
相關問題