2014-03-07 162 views
0

我正在嘗試讀取一個csv文件並製作一排數據行數組。這裏是我的代碼:將一串浮點數轉換爲浮點數組python

import csv 
def main(): 
    a = range(4) 
    x = 0 
    with open('test.csv', 'rb') as csvfile: 
     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') 
     for row in spamreader: 
      a[x] = [float(x) for x in row.split()] 
      x += 1 
    print a 

輸出:

[['13,4.2,2.4,5,6.4'], ['14,3.2,3.4,5.6,7.2'], ['15,8.5,3.7,8.5,0.75'], ['16,5.4,8.3,3.5,5.4']] 

如何打開從1串這些陣列在float數組?

+1

爲什麼你有'分隔符=」「當你的數據是由逗號分隔'? – user2357112

+0

[csv row import into python array]可能重複(http://stackoverflow.com/questions/22242181/csv-row-import-into-python-array) – zhangxaochen

回答

2

我可以使用eval:

>>> ls = [['13,4.2,2.4,5,6.4'], ['14,3.2,3.4,5.6,7.2'], ['15,8.5,3.7,8.5,0.75'],  ['16,5.4,8.3,3.5,5.4']] 
>>> [ eval(x[0]) for x in ls ] 
[(13, 4.2, 2.4, 5, 6.4), (14, 3.2, 3.4, 5.6, 7.2), (15, 8.5, 3.7, 8.5, 0.75), (16, 5.4, 8.3, 3.5, 5.4)] 
>>> 
+0

eval比map或list理解更慢 – zhangxaochen

+0

任何原因它的緩慢? –

+0

你可以自己定時,或參見http://stackoverflow.com/questions/1832940/is-using-eval-in-python-a-bad-practice – zhangxaochen

1

直接回答你的問題:

x = [['13,4.2,2.4,5,6.4'], ['14,3.2,3.4,5.6,7.2'], ['15,8.5,3.7,8.5,0.75'], ['16,5.4,8.3,3.5,5.4']] 
x = [float(q) for a in x for q in a[0].split(',')] 

然而,更好的將是通過指定delimiter=','讀取時分裂它。

spamreader = csv.reader(csvfile, delimiter=',', quotechar='|') 
a = [row for row in spamreader] 
a = [x for sublist in a for x in sublist]