python - 使用python从大型文本文件中选择具有特定条件的特定行
问题描述
我有一个文本文件,它有 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 ,这需要很长时间,因为文件太大了我能做什么我只是说 column[2] = 4 保存新文本中的行??
***** 之后我需要另一个条件,即对于 Column[2] = 4 ,如果 20 <=column[3] <= 50 和
80 <=column[4] <= 120 --> 将这些行保存在另一个文件..
解决方案
如前所述grep
,可能是一个快速的非 python 解决方案,使用正则表达式,例如:
grep -E '^[0-9]+\s+[0-9]+\s+2\s' testgrep.txt > output.txt
它将第三列上output.txt
带有 a 的所有行保存在文件中。2
有关该模式的详细信息,请参阅https://regex101.com/r/j5EfEE/1。
推荐阅读
- postgresql - PostgreSQL:错误查询没有结果数据的目的地
- php - PHP继承不传递值
- python - 如何保持加载数据框
- bash - 如何查看一个命令的输出是否在另一个命令的输出中?
- stripe-payments - 处理条带订阅升级和降级的最佳方式
- html - 即使看起来我摆脱了所有可能的问题,更漂亮的扩展也不起作用
- c# - EF Core - 映射到共享查找表的最佳方式
- cluster-analysis - 在 ARULE 中对事务项进行聚类
- fhir-server-for-azure - Microsoft 是否在 $everything 查询中添加了对 _count 的支持?
- c# - 如何从图像获取绑定在源上的图像路径