我正在尝试通读数据文件并仅选择/打印特定列的值大于例如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
答案 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