如何从文本文件中只读取第26列?

时间:2015-04-27 16:34:13

标签: python io

我的.txt文件看起来如此:

 === Predictions on test data ===

 inst#     actual  predicted error prediction (6)
 1        1:1        6:6   +   0.753 (0)
 2        1:1        6:6   +   0.753 (0)
 3        1:1        5:5   +   0.975 (2)
 4        1:1        5:5   +   1 (11)
 5        1:1        5:5   +   0.992 (0)
 6        1:1        6:6   +   0.941 (0)
 7        1:1        3:3   +   0.857 (0)
 8        1:1        2:2   +   0.967 (0)
 9        1:1        2:2   +   1 (0)
10        1:1        5:5   +   1 (97)
11        1:1        5:5   +   0.956 (0)
12        1:1        5:5   +   1 (1)
13        1:1        5:5   +   0.958 (59)
14        1:1        5:5   +   0.969 (0)
15        1:1        5:5   +   0.984 (0)
16        1:1        4:4   +   0.8 (0)
17        1:1        5:5   +   1 (141)
18        1:1        5:5   +   0.974 (5)

如何只读取“预测”列中的第一个值?特别是,数值出现在每一行的第26列(比如说)?

我写了一个python脚本:

f = open("out_grasp_R.txt", 'r')
f.readline()
f.readline()
f.readline()
for line in f:
     f.read(25)
     print(f.read(1))
     f.readline()

我收到错误消息“混合迭代和读取方法会丢失数据”

我想要一个像:

这样的数组
[6,6,5,....]

我该怎么办?

3 个答案:

答案 0 :(得分:1)

拆分并从第三列获取第一个元素

更简单
with open("out_grasp_R.txt", 'r') as f:  
    next(f)
    print([line.split()[2][0] for line in f])

['6', '6', '5', '5', '5', '6', '3', '2', '2', '5', '5', '5', '5', '5', '5', '4', '5', '5']

如果您确定间距使用print([line[21] for line in f]),则根据输入文件对应于您想要的数据。除非您考虑空格列,否则实际上有六列。

答案 1 :(得分:1)

使用readlines方法,您可以获得每行的字符串列表:

filename = 'out_grasp_R.txt'
with open(filename) as f:
    content = f.readlines()

predicted = []
for line in content:
    predicted.append(int(line.split()[2][0]))

print predicted

[6, 6, 5, 5, 5, 6, 3, 2, 2, 5, 5, 5, 5, 5, 5, 4, 5, 5]

答案 2 :(得分:0)

您可以获取行字符串并将其索引为数组。

print(line[25])

或者制作数组:

array.append(line[25])

这确实要求您确定总是行中的第26个字符。