在输入文件

时间:2016-09-29 11:11:27

标签: python string python-3.x

我正在寻找以" 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"开头的行?

1 个答案:

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