我有一个包含矩阵的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 :(得分:4)
mat_line = [line]
这一行只是将该行作为单个字符串,并使其成为一个元素列表。如果您想用逗号分隔,请执行以下操作:
mat_line = line.split(',')
如果你想将它们变成数字,你必须这样做:
mat_line = [float(i) for i in line.split(',')]
答案 1 :(得分: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
以避免泄漏打开的文件描述符),遍历行,拆分每一行,并将每个项转换为浮点数。
答案 2 :(得分: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中的任何对象不是整数,则会出现错误,因此我建议您创建一个验证方法,以确保它是一个整数。