将文件读取为二维列表

1 投票
3 回答
2164 浏览
提问于 2025-04-18 17:02

我想把一个文件(比如说有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.1
2.5
2.4
2.5
8.3

任何想法和帮助都非常感谢!

3 个回答

0

只需要把每一行的数据点添加到数据中就可以了。没必要在data里面初始化一个列表。然后,如果你想获取某一列的数据,可以使用列表推导式:

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


data = []

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

print([x[1] for x in data])
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))
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])

撰写回答