2016-09-29 6 views
1

Ich suche nach den Zeilen, die mit "ND" in einer Eingabedatei beginnen. die wie folgt aussieht:Den genauen String in der Eingabedatei finden

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 

ich einen Code wie folgt geschrieben:

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 

Aber im Ergebnis erhalte ich auch die vierte Spalte der Zeichenfolge mit „NS“ ab. Ergebnis sieht wie folgt aus:

256.37 
256.45 
82.00 
26.00 

Wie kann ich den Code schreiben, um die Zeilen beginnend mit "NS" zu vermeiden?

+0

Sie meinen 'wenn line.startswith ('ND') versuchen ....'? –

Antwort

2

Nun, sind Sie mit einem Flag found_ND, es macht True, wenn die Zeile gefunden wird (was für die erste Zeile geschieht) und dann nie wieder ändern zu False:

if text in line: 
    found_ND = True 

found_ND wird True für alle folgenden Iterationen. Kurz gesagt, nicht nur einen Flag verwenden, müssen Sie es nicht:

for line in f: 
    if text in line: 
     #do whatever you want 
     try: 
      line = line.strip() 
      columns = line.split() 
      # .. and so on. 

oder, wenn man streng an den Anfang überprüfen mag (das heißt, könnte die Linie 'ND' an anderer Stelle enthält) verwendet startswith als @ Wiktor vorgeschlagen:

for line in f: 
    if line.startswith('ND '): 
     # ... 
Verwandte Themen