我正在寻找以" ND"开头的行。在输入文件中。 看起来像这样:
ND 195 4.53434033e+006 5.62453069e+006 2.56369141e+002
ND 196 4.53436645e+006 5.62443565e+006 2.56452118e+002
NS 129 113 97 82 58 59 37 22 17 18
NS 5 6 12 26 42 64 62 85 102 117
我写了这样的代码:
from __future__ import print_function
found_ND = False
text = "ND"
with open('input.txt', 'r') as f, open('output.dat', 'w') as outfile:
for line in f:
if text in line:
found_ND = True
if found_ND:
#do whatever you want
try:
line = line.strip()
columns = line.split()
i = float(columns[1])
x = float(columns[2])
y = float(columns[3])
z = float(columns[4])
print(z)
print("{:.2f}".format(z), file=outfile)
except ValueError:
pass
但是在结果中我还得到了以" NS"开头的字符串的第四列。 结果如下所示:
256.37
256.45
82.00
26.00
如何编写代码以避免以"NS"
开头的行?
答案 0 :(得分:2)
好吧,你正在使用一个标记found_ND
,如果找到该行,则为True
(第一行会发生这种情况),然后永远不会将其更改回False
:
if text in line:
found_ND = True
对于以后的所有迭代, found_ND
将为True
。简而言之,就是不要使用旗帜,你不需要它:
for line in f:
if text in line:
#do whatever you want
try:
line = line.strip()
columns = line.split()
# .. and so on.
或者,如果您严格要检查开头(也就是说,该行可能在其他位置包含'ND'
),请使用startswith
作为@Wiktor建议:
for line in f:
if line.startswith('ND '):
# ...