2016-12-06 5 views
0

whileループの各繰り返しの出力をキャプチャするログファイルを作成しようとしていますが、最後から2番目の行をキャプチャしてその下に空白の新しい行を作成できるように見えます。Python - whileループを繰り返し実行するために、テキストファイルに新しい行を書く方法はありますか?

私はこのコードを持っている:

from glob import glob 
import task_prep 
import time 
import datetime 

path = glob('F:\\Transcoder\\staging\\prep\\*.xml') 


while len(path) >= 0: 
    log = open('log_file.txt', 'w') 
    if int(len(path)): 
     data = (str(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")) + ': files') 
     print(data) 
     log.write(data + '\n') 
     task_prep.task_prep() 
     path = glob('F:\\Transcoder\\staging\\prep\\*.xml') 
     time.sleep(3) 

    else: 
     data = (str(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")) + ': no files') 
     print(data) 
     log.write(data + '\n') 
     path = glob('F:\\Transcoder\\staging\\prep\\*.xml') 
     time.sleep(3) 

これは単に最初の行に書かれていますすべてのものを上書きすることであるが、しかし、これは印刷する内容である:

2016-12-06 10:25:56: no files 
2016-12-06 10:25:59: no files 
2016-12-06 10:26:02: no files 
2016-12-06 10:26:05: no files 
2016-12-06 10:26:08: no files 
2016-12-06 10:26:11: no files 
2016-12-06 10:26:14: no files 
2016-12-06 10:26:17: no files 
2016-12-06 10:26:20: no files 
2016-12-06 10:26:23: no files 
2016-12-06 10:26:26: no files 

Process finished with exit code 1 

これはで書き込まれますものですテキストファイル:

2016-12-06 10:26:23: no files 

1行目の文字列と1行目の改行。

私は間違っていますか?

+1

ログに印刷している場合は、 ''a ''で開きたいので、出力を追加します。 – Iluvatar

答えて

3

ファイル内の位置0でファイルを開き、以前の結果を上書きしています。

あなたは、メモリ内の前の位置を維持するためにwhileブロックの前に、あなたのファイルを開くことがあります。

from glob import glob 
import task_prep 
import time 
import datetime 

path = glob('F:\\Transcoder\\staging\\prep\\*.xml') 

with open('log_file.txt', 'w') as log: 
    while len(path) >= 0: 
     if int(len(path)): 
      data = (str(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")) + ': files') 
      log.write(data + '\n') 
      task_prep.task_prep() 
      path = glob('F:\\Transcoder\\staging\\prep\\*.xml') 
      time.sleep(3) 

     else: 
      data = (str(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")) + ': no files') 
      log.write(data + '\n') 
      path = glob('F:\\Transcoder\\staging\\prep\\*.xml') 
      time.sleep(3) 

ボーナス:ここで、私はopenに実装されたコンテキストマネージャを使用するwithを使用しています。ファイルはwithブロックの終了後に自動的に閉じられます。

また、'a'モード(追加用)を使用することもできますが、ファイルを何度も開いてしまい、非常に非効率です。

+0

残念ながら、このメソッドを使用するときは何も書かれていないようですが、空のテキストファイルを取得するだけです。 – Lewis909

+0

私はPythonでより多くの経験を積んだことがあり、その基礎を成し遂げてきた私はこのコンセプトを実践することができました。ありがとう! – Lewis909

関連する問題