2016-12-05 2 views
-1

У меня есть файл CSV, который содержит матрицу:как превратить строку из CSV-файла в список в Python

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")) 

выше функция открывает файл (я использую 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 не является целым числом, то придумают с ошибкой, поэтому я предлагаю вам создать метод проверки, чтобы быть абсолютно уверенным в том, что она представляет собой целое число.