2016-08-03 12 views
1

文字列がファイルに存在しない場合にのみ、文字列をファイルに書きたいと思います。条件付きでファイルに書き込む最も効率的な方法は?

私の最初の考えはこのようなことでしたが、ファイルに何も書き込んでいません。

with open("FILE PATH", "a+") as database: 
    for lines in database.read(): 
     if 'MY STRING' in lines: 
      continue 
     else: 
      database.write('MY STRING') 

まず、私はここで間違っていますか?第二に、これが適切に機能していると仮定すると、これを行うより効率的な方法がありますか?私はそこにあると仮定しています。 database.read()を使用して

おかげ

+1

'database.read()'は単一の文字列を返すので、その文字列をループすると、その文字列内のすべての文字が繰り返し処理されます。 – TheGirrafish

+0

ファイルが空の場合、 '.read()'は空の文字列を返しますので、forループの本体は決して実行されません。つまり、ファイルは空ではなく、効率的ではなく、「MY STRING」が前面に表示されていても常にファイル全体を読み込むため、コードは機能します。 'lines'は示唆的なものなので、あなたが望むものとファイルがどのように構造化されているのかを教えてください。 – dhke

+1

@ TheGirrafishあなたの実装はうまくいきました。 – Harrison

答えて

1

は、テキストファイルを読み込み、ファイル全体を含む単一の文字列を返します。この文字列をループすると、その文字列内の各文字が個別に返されるため、'MY STRING'が見つかりません。単にそのような全体として、ファイル内'MY STRING'を探します。

with open("FILE PATH", "a+") as database: 
    if 'MY STRING' not in database.read(): 
     database.write('MY STRING') 

あなたはそれが少しより効率的に、このように一つだけifを持っている、それだけでcontinueだと見て最初if文は必要ありません。

関連する問題