-1

閉じずにテキストファイルに書き込みたいのですが、何を閉じればいいのかわからないので、穴の問題を説明します

というテキストを作成resume.txtしたので、プロジェクトの特定のプロセスごとに上書きされるresume.txtため、プロジェクトが開始されるたびにそのファイルがチェックされ、最後のプロセスが確認されるため、各書き込み後に問題を適用するために閉じなければなりません。これが良いとは思わない もっと良い解決策があると思う

このコードは機能しません

wr = open('resume.txt','w')
login(usr,pas)
wr.write('login')
post(msg,con)
wr.write('post')
..so on 

問題は、閉じずに書き込む方法wr.closeです。ユーザーまたは接続タイムアウトによって終了される可能性があるため、最後に書き込むことができません..など

4

3 に答える 3

6

これがあなたのコードに当てはまるかどうかはわかりませんが、withブロックでラップするのはどうですか?

with open('resume.txt','w') as wr:
    login(usr,pas)
    wr.write('login')
    # This is hacky, but it will go to the beginning 
    # of the file and then erase (truncate) it
    wr.seek(0)
    # I think you wanted to do this after you tried an action, 
    # but you can move it to wherever you want
    post(msg,con)
    wr.truncate()
    wr.write('post')

これにより、エラー時にファイルが確実に閉じられます。ファイルを閉じたいときは、 と同じレベルで次のコードを開始してくださいwith:

with open('resume.txt','w') as wr:
    login(usr,pas)
    wr.write('login')
    wr.seek(0)
    post(msg,con)
    wr.truncate()
    wr.write('post')
    # wr.seek(0) ...

# Next steps...

また、loggingモジュールを調べて、目的を達成できるかどうかを確認することをお勧めします。

于 2012-08-23T19:33:26.143 に答える
3

まず、tMCに感謝します。

解決策は

wr = open('resume.txt','w')
login(usr,pas)
wr.write('login')
wr.flush()
post(msg,con)
wr.seek(0)
wr.write('post')
wr.flush()

私はflush()書いて適用しseek(0)、上書き するために使用しました

于 2012-08-23T21:58:28.667 に答える
-1

with ステートメントを試してください。理解するのは少し複雑ですが、まさにこれを行う必要があります。

于 2012-08-23T19:32:05.423 に答える