2016-03-24 12 views
0

私は、空白で置き換えたいと思われる繰り返し行があるファイル<this is repeated>を持っています。""。ただし、繰り返し行の最初の出現または最後の出現を置き換える必要はありません。前にreplace()を試しましたが、この関数はファイル内のすべての文字列を置き換えます。期待される結果を得るためにそれを書く方法はありますか? シモンズ:それは大きなテキストファイルPython:ファイル内の反復行を空白で置き換えますが、最初または最後の出現には置き換えません。

ファイルは以下の通りです:
<this is repeated>
second line
another lines
third line
<this is repeated>
<this is repeated>

+0

は、ラインを読むを現在の行が最後と異なる場合、出力ファイルに書き出します。それ以外の場合は、行をスキップして空白行を書き込んでください。それ以上のことはありません。 –

+0

それを空行に置き換えるか、行全体を削除しますか? –

答えて

0

注:私は、ifという投稿後に実現最後の出現は01のない最後の行でしたの後にこのテクニックを置くと、次の最後のオカレンスが残されます。あなたが最初に出現した見つけるまで

まず、ファイルを反復する必要があるでしょう:

file = <OPEN FILE> 
rep_line = "<this is repeated>\n" 

beginning = "" #record all data until found 
while True: #broken when rep_line is found in file (or end of file is reached) 
    line = file.readline() 
    if not line: 
     raise EOFError("reached end of file before finding first occurence") 
    beginning+=line 
    if line == rep_line: 
     break 

rest = file.read() #you can read the rest after iterating over a few lines 

が次にあなたがbeginningを持っています最初の発生までを含むすべてのものが含まれており、rest

だから、restで行う必要があるのはcountです。最後の時間以外はどのように時間を置き換えて置き換えてください。

reps = rest.count(rep_line) 

new_text = beginning + rest.replace(rep_line,"",reps - 1) 
               # ^don't replace the last one 

ただし、テキスト(例えば"hello <this is repeated>"など)で終了し、これはまた、\ nは、右の行の前にあることを確認することで固定することができ、ラインピックアップします。この直接的なアプローチ:

reps = rest.count("\n"+rep_line) 

new_text = beginning + rest.replace("\n"+rep_line,"\n",reps - 1) 
                #^replace with a single newline 
+0

を空行で置き換えるのではなく、完全に削除するのではなく、 '' \ n "'または最後の例 '" \ n \ n "'で空行を残してください。 –

+1

line rest = file.read()で「ミキシングの繰り返しとメソッドの読み込みがデータを失う」というエラーが発生しました。なぜなのかご存知ですか? – wanderergirl

+0

私は 'open(" my_file.txt ")'を実行しているだけでなく、 'open'関数を持つライブラリを' from LIBRARY import * 'しているので、 'file.readline()'を使用してください。なぜなら、それはおそらくもっと良い方法でしょう。 –

関連する問題