从python中的文件中为给定值选择行

时间:2015-03-26 15:49:44

标签: python

我正在尝试通读数据文件并仅选择/打印特定列的值大于例如1的列。我已经加入了我的测试'码。 (如果我指定了值,我可以让它工作,如注释' a = ...'中所示,但是当从文件中读取时则没有。)

import numpy as np

a = open('data_file.dat', 'r')

#a=[432,2,34,542]

header0 = a.readline()

x=[]
y=[]
z=[]

for line in a:
        line = line.strip()
        columns = line.split()
        x=columns[0]
        y=columns[1]
        z=columns[2] 


        if (x > 20 for x in a):
            print x

3 个答案:

答案 0 :(得分:0)

我认为你很接近。我真的不确定if last语句将会做什么,但它看起来像是一个列表理解与if混合,也混合了你重新分配x的事实(如果该语句实际上有效... )。尝试这样的事情:

for line in a:
    columns = line.strip().split()
    if columns[0] > 20:
        print line

答案 1 :(得分:0)

看起来问题可能是最后两行。

for line in a:
    ...
    if (x > 20 for x in a): # a is being consumed entirely here, which isn't what you want
        print x

第二个for __ in a正在读取整个文件,如果第一行和第一列数据大于20,则仅打印行。只需检查

if x > 20:

代替。

答案 2 :(得分:0)

首先,if (x > 20 for x in a)行没有任何意义。这将永远是真的,因为它创建了一个生成器对象。

你想要的只是:if int(x) > 20:。请注意,您首先必须将x转换为整数,因为它是一个字符串。

因此,如果您有data.dat文件,如下所示:

col1 col2 col3
10 5 2
59 24 8
18 199 -0

然后你可以用

阅读它
f = open('data.dat', 'r')
header = f.readline()

for line in f:
    line = line.strip()
    columns = line.split()

    x=columns[0]
    y=columns[1]
    z=columns[2]

    if int(x) > 20:
        print columns

附加说明:如果您的所有值都是整数,则可以使用map(int,...)快速转换它们。像

for line in f:
    columns = map(int, line.strip().split())
    if columns[0] > 20:
        print columns