使用python从大型文本文件中选择具有特定条件的特定行

时间:2018-08-12 14:46:05

标签: python text jupyter-notebook linecache

我有一个文本文件,该文件有5列,且行数超过200万,如下所示

134   1   2   6    3.45388e-06
135   1   2   7    3.04626e-06
136   1   2   8    4.69364e-06
137   1   2   9    4.21627e-06
138   1   2   10   2.38822e-06
139   1   2   11   1.91216e-06
...
140   1   3   2    5.23876e-06
141   1   3   3    2.83415e-06
142   1   3   7    2.32097e-06
143   1   3   9    6.26283e-06
144   1   3   16   4.22556e-06
...  
145   2   1   2   3.67182e-06
146   2   1   4   4.61481e-06
147   2   1   6   1.1703e-06
...
148   2   2   7   4.61242e-06
149   2   2   21   1.84259e-06
150   2   2   22   4.31435e-06
...
151   2   3   23   4.34518e-06
152   2   3   24   3.76576e-06
153   2   3   25   2.61061e-06
...
154   3   1   2   4.07107e-06
155   3   1   7   4.83971e-06
156   3   1   8   3.43919e-06
...
157   3   2   29   6.27991e-06
158   3   2   30   7.44213e-06
159   3   2   31   9.56985e-06
...
160   3   3   32   1.38377e-05
161   3   3   33   1.62724e-05
162   3   3   34   9.85653e-06
...

第二列显示每一层的数量,在每一层中,我都有一个矩阵,其中列3和4是该层中行和列的数量,最后一列是我的数据  首先,我想提出一个条件,如果第二列等于一个数字(例如3),则将该条件的所有行打印到另一个文件中,然后使用以下代码进行操作:

    with open ('C:\ Python \ projects\A.txt') as f,  open('D:\ Python \New_ projects\NEW.txt', 'w') as f2:
      # read the data from layer 120 and write these data in New.txt file
      for f in islice (f,393084, 409467):
        f2.write(f)
a = np.loadtxt('D:\ Python \New_ projects\NEW.txt

但是问题在于,对于每一层,我都必须转到文件,并找到每一层的第一行和最后一行,然后将其放入islice,这会花费很长时间,因为文件很大 我对列[2] = 4只能说些什么,将行保存为“新文本”?

*****,然后我需要另一个条件,即对于Column [2] = 4,如果20 <= column [3] <= 50并且
 80 <= column [4] <= 120->将这些行保存到另一个文件中。

2 个答案:

答案 0 :(得分:0)

使用grep功能并使用过滤后的数据创建另一个文件,grep的速度足以处理文件

答案 1 :(得分:0)

如前所述,grep可以是使用正则表达式的快速非Python解决方案,例如:

grep -E '^[0-9]+\s+[0-9]+\s+2\s' testgrep.txt > output.txt

,将在第三列中带有output.txt的所有行保存在文件2中。有关模式的详细信息,请参见https://regex101.com/r/j5EfEE/1