我有一个带列<。p>的.txt文件
#x y z
1 4 6
2 5 6
3 6 8
4 8 8
5 7 8
6 7 8
第一列按升序排序。我想过滤第一列x中2到6之间的值,然后创建一个具有相应y和z列的新文件
因此输出文件如下所示:
# x y z
3 6 8
4 8 8
5 7 8
这个简单的行过滤了x列,但是如何让相应的其他列写入新文件?
x=x[np.where(x>2)]
print x
x=x[np.where(x<6)]
print x
你的帮助非常适用
答案 0 :(得分:1)
您可以使用np.where
获取满足条件的条目的索引,然后仅将这些行保存到文件中,
import numpy as np
data_in = np.loadtxt('xyz.txt', dtype = int)
idx = np.where(np.logical_and(data_in[:,0]>2, data_in[:,0]<6))[0]
np.savetxt('xyz_filtered.txt', data_in[idx,:], fmt = '%d')
这假设您在输入文件中没有任何标题,并且您希望所有数据都是整数,但任何必要的更改都不会对程序产生太大影响。
答案 1 :(得分:1)
我不确定这是否正是您想要的,但过滤从输入文件中获取的数组是一个可行的选择。这是代码:
filename = 'table.txt'
with open(filename, mode='rt') as file:
table = [[int(n) for n in line.split()] for line in file]
predicate = lambda l: 2 < l[0] < 6
table = filter(predicate, table)
with open('output.txt', mode='wt') as file:
for row in table:
line = ' '.join(map(str, row))
file.write(line + '\n')