2016-09-29 25 views
1

入力ファイルで "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」で始まる文字列の4番目の列を取得します。 結果は次のようになります。

256.37 
256.45 
82.00 
26.00 

にはどうすれば"NS"で始まる行を避けるためにコードを書くことができますか?

+0

if line.startswith( 'ND')try .... ' –

答えて

2

さて、あなたは行が見つかった場合、それTrueなって、フラグfound_NDを使用して(最初の行のために起こった)、その後Falseに戻って、それを変更することはありませんしている:

if text in line: 
    found_ND = True 

found_NDすることになります次のすべての繰り返しに対してTrue。あなたは厳密に(つまり、行が他の場所で'ND'が含まれる可能性があります)@としてstartswithを使用開始を確認したい場合は、

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

のか:一言で言えば、単にフラグを使用しないでください、あなたはそれを必要としませんWiktorは次のように提案しました:

for line in f: 
    if line.startswith('ND '): 
     # ... 
関連する問題