2016-12-05 40 views
-1

我有一個包含一個CSV文件矩陣:如何將字符串從csv文件到列表中的蟒蛇

1,9,5,78 
4.9,0,24,7 
6,2,3,8 
10,21.4,8,7 

我想創建一個返回名單列表的功能:

[[1.0,9.0,5.0,78.0],[4.9,0.0,24.0,7.0],[6.0,2.0,3.0,8.0],[10.0,21.4,8.0,7.0]] 

這是我的嘗試:

fileaname=".csv" 
def get_csv_matrix(fileaname): 
    mat=open(fileaname,'r') 
    mat_list=[] 
    for line in mat: 
     line=line.strip() 
     mat_line=[line] 
     mat_list.append(mat_line) 
return mat_list 

,但我得到的名單列表與一個字符串:

[['1,9,5,78'], ['4.9,0,24,7'], ['6,2,3,8'], ['10,21.4,8,7']] 

我該如何將字符串列表轉換爲浮點列表?

+0

另外:存在['csv'](https://docs.python.org/3/library/csv.html)模塊。與函數[pandas.read_csv()](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html#pandas-read-csv)一樣。 –

回答

4
mat_line = [line] 

此行只是將行作爲單個字符串並將其作爲一個元素列表。如果你想用逗號將其分離,而不是做:

mat_line = line.split(',') 

如果你想也把他們變成數字,你就必須做:

mat_line = [float(i) for i in line.split(',')] 
+0

剛剛編輯它,它現在。 – user3030010

1

我覺得更容易閱讀列出理解而不是for循環。

def get_csv_matrix(filename): 
    with open(filename) as input_file: 
     return [[float(i) for i in line.split(',')] for line in input_file] 

print (get_csv_matrix("data.csv")) 

上述功能打開文件(I使用with避免泄漏打開文件描述符),在所述線迭代,將每個線,並且每個項轉換爲浮點數。

0

嘗試

fileaname=".csv" 
def get_csv_matrix(fileaname): 
    mat=open(fileaname,'r') 
    mat_list=[] 
    for line in mat: 
     line=line.strip() 
     mat_line=line.split(",") 
     for i in mat_line: 
      i_position = line.index(i) 
      line[i_position] = float(i) 
     mat_list.append(mat_line) 
    return mat_list 

如果mat_line任何對象不是一個整數,你會想出一個錯誤,所以我建議你創建一個驗證方法是絕對肯定,這是一個整數。