将文件读入二维列表

时间:2014-08-12 17:57:58

标签: python

我想将一个(例如5行和3列)的文件读入二维列表。 所以,到目前为止我的代码是:

说我的数据文件是:

 1.0 2.1 3.4
 1.1 2.5 3.0
 2.1 2.4 2.8
 2.6 2.5 5.6
 1.8 8.3 5.4



fil = open('data.dat','r')


data = [[]]         # initialize two-dim. list

for rows in fil:
     cols = rows.split()
     data.append(cols[i] for i in cols)

print(data[:][1])

所以我希望命令print(data[:][1])打印第2列的所有行。也就是说,输出应该是:

2.1
2.5
2.4
2.5
8.3

任何想法和帮助都将受到高度赞赏!

3 个答案:

答案 0 :(得分:3)

由于您的文件中包含数字,我建议您使用numpy

>>> import numpy as np
>>> f = open("data.dat")
>>> data = np.loadtxt(f, delimiter=" ")
>>> data
array([[ 1. ,  2.1,  3.4],
       [ 1.1,  2.5,  3. ],
       [ 2.1,  2.4,  2.8],
       [ 2.6,  2.5,  5.6],
       [ 1.8,  8.3,  5.4]])

这样,您还可以轻松地从数据中选择单个列:

>>> data[:,1]
array([ 2.1,  2.5,  2.4,  2.5,  8.3])

答案 1 :(得分:2)

问题1:填写data

添加一个生成器,将每行的列生成数据。这意味着您的data看起来像

[[], <generator>, <generator>, ...]

您要做的是从一个空列表开始,并为每一行添加列:

data = []
for row in fil:
    cols = row.split()
    data.append(cols)

问题2:打印data

data[:][1]没有达到您的预期。它从data获取所有元素(即它复制列表)并选择第二个元素。相反,使用

[row[1] for row in data]

获取每行的第二列。要根据需要格式化输出,可以使用string.join

print("\n".join(row[1] for row in data))

答案 2 :(得分:0)

只需将每行的数据点附加到数据即可。无需初始化data内的列表。然后,为了获得所需的列,您可以使用列表推导:

fil = open('data.dat','r')


data = []

for rows in fil:
    data.append(rows.split())

print([x[1] for x in data])