如何从文件中过滤列值并在python中写入新文件

时间:2018-02-10 21:54:19

标签: python numpy

我有一个带列<。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

你的帮助非常适用

2 个答案:

答案 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')