首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文件读入二维表

将文件读入二维表
EN

Stack Overflow用户
提问于 2014-08-13 01:57:58
回答 3查看 1.7K关注 0票数 1

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

假设我的数据文件是:

代码语言:javascript
复制
 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列的所有行。也就是说,输出应该是:

代码语言:javascript
复制
2.1
2.5
2.4
2.5
8.3

任何想法和帮助都将受到高度的感谢!

EN

回答 3

Stack Overflow用户

发布于 2014-08-13 02:05:48

由于您的文件充满了数字,我建议您使用numpy

代码语言:javascript
复制
>>> 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]])

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

代码语言:javascript
复制
>>> data[:,1]
array([ 2.1,  2.5,  2.4,  2.5,  8.3])
票数 3
EN

Stack Overflow用户

发布于 2014-08-13 02:03:38

问题1:填充data

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

代码语言:javascript
复制
[[], <generator>, <generator>, ...]

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

代码语言:javascript
复制
data = []
for row in fil:
    cols = row.split()
    data.append(cols)

问题2:打印data

data[:][1]不会执行您所期望的操作。它从data中获取所有元素(即复制列表)并选择第二个元素。相反,您可以使用

代码语言:javascript
复制
[row[1] for row in data]

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

代码语言:javascript
复制
print("\n".join(row[1] for row in data))
票数 2
EN

Stack Overflow用户

发布于 2014-08-13 02:04:40

只需将每行的数据点附加到数据。不需要在data中初始化列表。然后,为了得到你想要的列,你可以使用列表理解:

代码语言:javascript
复制
fil = open('data.dat','r')


data = []

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

print([x[1] for x in data])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25271035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档