我有兴趣将文件内容复制到Python中的多维列表中。
文件就像
b,30.83,0,u,g,w,v,1.25,t,t,01,f,g,00202,0,+
a,58.67,4.46,u,g,q,h,3.04,t,t,06,f,g,00043,560,+
a,24.50,0.5,u,g,q,h,1.5,t,f,0,f,g,00280,824,+
b,27.83,1.54,u,g,w,v,3.75,t,t,05,t,g,00100,3,+
b,20.17,5.625,u,g,w,v,1.71,t,f,0,f,s,00120,0,+
b,32.08,4,u,g,m,v,2.5,t,f,0,t,g,00360,0,+
我想要的是用逗号(','
)和换行符('\n'
分隔值,以跳转到下一个维度)...例如: -
x[0][0]='b', x[0][1]=30.83, x[1][0]='a' ....
有什么建议吗?我尝试使用csv
,但是我以后访问这些值太复杂了。有什么办法可以用简单的文件方法来做到这一点吗?提前谢谢。
答案 0 :(得分:3)
使用list comprehension(也从输入中删除换行符):
>>> x=[i.strip().split(',') for i in open("filename", 'r')]
编辑:对于问题中的输入,这将产生:
>>> x
[['b', '30.83', '0', 'u', 'g', 'w', 'v', '1.25', 't', 't', '01', 'f', 'g', '00202', '0', '+'], ['a', '58.67', '4.46', 'u', 'g', 'q', 'h', '3.04', 't', 't', '06', 'f', 'g', '00043', '560', '+'], ['a', '24.50', '0.5', 'u', 'g', 'q', 'h', '1.5', 't', 'f', '0', 'f', 'g', '00280', '824', '+'], ['b', '27.83', '1.54', 'u', 'g', 'w', 'v', '3.75', 't', 't', '05', 't', 'g', '00100', '3', '+'], ['b', '20.17', '5.625', 'u', 'g', 'w', 'v', '1.71', 't', 'f', '0', 'f', 's', '00120', '0', '+'], ['b', '32.08', '4', 'u', 'g', 'm', 'v', '2.5', 't', 'f', '0', 't', 'g', '00360', '0', '+']]
>>> x[0][0]
'b'
>>> x[4][2]
'5.625'
答案 1 :(得分:1)
编辑:一些清理。请注意,使用dtype = None时,数组的列甚至会被解析为正确的类型。如果你只想要字符串,dtype = np.str就可以了。 StringIO是一个自包含的示例,但您可以用您的文件名替换它(请参阅genfromtxt文档)。
import numpy as np
from StringIO import StringIO
text = """b,30.83,0,u,g,w,v,1.25,t,t,01,f,g,00202,0,+
a,58.67,4.46,u,g,q,h,3.04,t,t,06,f,g,00043,560,+
a,24.50,0.5,u,g,q,h,1.5,t,f,0,f,g,00280,824,+
b,27.83,1.54,u,g,w,v,3.75,t,t,05,t,g,00100,3,+
b,20.17,5.625,u,g,w,v,1.71,t,f,0,f,s,00120,0,+
b,32.08,4,u,g,m,v,2.5,t,f,0,t,g,00360,0,+"""
data = np.genfromtxt(StringIO(text), dtype=None, delimiter = ',')
print data['f1']
此外,如果后续代码坚持使用普通的python数据结构,那就没问题了。例如:
print data.tolist()
print zip(*data.tolist())
答案 2 :(得分:1)
在another SO question中找到:
import csv
with open('filename', 'Ur') as f:
data = list(list(rec) for rec in csv.reader(f, delimiter=','))