2017-07-17 8 views
0

私は多くの行のテストファイルを持っています。特定の開始文字と終了文字を含む行を削除したい。ここ特定の文字列で終わるファイルの明確な行を削除する方法

は私のコードです:

with open('test.txt', 'r') as f, open('output.txt', 'w') as out: 
    for i, line in enumerate(f): 
     if (line.startswith('E3T') and line.endswith('3')): 
      out.write(line) 
     elif (line.startswith('E4Q') and line.endswith('3')): 
      out.write(line) 
     elif (line.startswith('E4Q') and line.endswith('4')): 
      out.write(line) 
     elif (line.startswith('E4Q') and line.endswith('3')): 
      out.write(line) 
     elif line.startswith('BC'): 
      break 

これは

E3T 1 2 1 3 3 
E3T 2 4 2 5 1 
E3T 3 3 5 2 4 
E3T 3326 2001 2008 1866 10 
E4Q 3327 1869 2013 2011 1867 9 
E4Q 3328 1867 2011 2012 1868 8 
E4Q 3329 1870 2014 2013 1869 4 
E3T 8542 4907 4908 4760 5 
E3T 8543 4768 4909 4761 9 
E3T 8544 4909 4763 4761 6 
E3T 17203 9957 9964 10161 3 
E3T 17204 9957 10161 9959 2 
BC 1 "Zulauf: Temperatur" 12 0 1 "HYDRO_WT-2D" 
BC_DEF 12 1 "Temperatur [°C]" 5 "Zeit [s]" "Temperatur [°C]" 

私のtest.txtというファイルで、出力は次のようにする必要があります:

E3T 1 2 1 3 3 
E3T 3 3 5 2 4 
E4Q 3329 1870 2014 2013 1869 4 
E3T 17203 9957 9964 10161 3 

私が思うに、それがありませんスペースのせいで動作しません。これを行うためのpythonicの方法はありますか、私は行を分割し、最初と最後のcharachtersを比較する必要がありますか?

答えて

1

このようにして行を読むと、行末に改行文字または改行/改行文字があり、通常は目に見えません。何とかそれに対処する必要があります。それ以外の場合は、処理したい文字ではなくendswithを処理します。次に、行を出力するときに改行文字を戻す必要があります。この場合

with open('test.txt', 'r') as f, open('output.txt', 'w') as out: 

    for i, line in enumerate(f): 
     line = line.strip() 
     if (line.startswith('E3T') and line.endswith('3')): 
      out.write(line+'\n') 
     elif (line.startswith('E4Q') and line.endswith('3')): 
      out.write(line+'\n') 
     elif (line.startswith('E4Q') and line.endswith('4')): 
      out.write(line+'\n') 
     elif (line.startswith('E4Q') and line.endswith('3')): 
      out.write(line+'\n') 
     elif line.startswith('BC'): 
      break 

私は、各行の先頭と末尾に空白を破棄するstripを使用しました。これは非常に粗雑なアプローチです。

line = line.rstrip() 

文字列の右端からのみ空白を取り除くことをお勧めします。

EDITは、コメントでの質問への答えに:

は、これらの線と上記の最後の行を置き換え、

out.write(line+'\n') 
else: 
    continue 
+0

は、ソリューションをありがとう!残りの行を書いて壊れないようにするにはどうすればいいですか?残りのファイルは入力ファイルと同じでなければなりません! –

+0

編集をご覧ください。 –

関連する問題