在Python中将文件内容复制到多维列表

时间:2014-01-09 11:31:12

标签: python list

我有兴趣将文件内容复制到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,但是我以后访问这些值太复杂了。有什么办法可以用简单的文件方法来做到这一点吗?提前谢谢。

3 个答案:

答案 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=','))