0

簡単に言えば、次のようなコードがあります。

for a in range(3):
 result = 'abcd' + a
 opener = open('file.txt', "a")
 print results
 opener.write(results)

私の問題は、このコードをシェルで実行すると、印刷された結果が表示されることです。

abcd0
abcd1
abcd2

しかし、ファイルには、

abcd0abcd1

私が望む出力は、

abcd0abcd1abcd2

助言がありますか?このコードの何が問題なのかわかりません...

どんな助けでも本当に素晴らしいでしょう。前もって感謝します

4

3 に答える 3

3

Ashwini Chaudharyのソリューションははるかに優れています。私の答えは、何がうまくいかなかったのか、なぜうまくいかなかったのか、ループ内またはループ外でファイルを開く/閉じることの違いについてのバックグラウンドとして考えてください。

ファイルのオープンとクローズはペアにする必要があります。次のように、ループ内でファイルが繰り返しオープン、書き込み、クローズされます。

for a in range(3):
    result = 'abcd' + a
    opener = open('file.txt', "a")
    print results
    opener.write(results)
    opener.close()

ただし、多くの場合、ファイルを開いたり閉じたりするコストがかかるため、ループ内でファイルを開いたり閉じたりすることはお勧めできません。そのため、ループの前にファイルを開き、ループ内でファイルを書き込み、ループの後に閉じます。

opener = open('file.txt', "a")
for a in range(3):
    result = 'abcd' + a
    print results
    opener.write(results)
opener.close()

もちろん、ファイルを開いたままにしておくとループが長くなり、プログラムがクラッシュしたり、中断されたり、コンピューターの再起動時にデータが失われたりする危険があります。これらの場合、多くの場合、ファイルを繰り返し開いたり閉じたりするよりも、オペレーティング システムに強制的にフラッシュする方が良い方法です。

opener = open('file.txt', "a")
for a in range(3):
    result = 'abcd' + a
    print results
    opener.write(results)
    opener.flush()
opener.close() 
于 2012-07-13T17:27:39.663 に答える
2

書き込みが終わったら、ファイルを閉じてみてください。ファイルを閉じる前に python が終了すると、最後の書き込みがフラッシュされず、ファイルに書き込まれない可能性があります。追加してみてください:

opener.close()

最後まで。

于 2012-07-13T17:19:29.710 に答える
2

を使用するwith()と、ファイルの開閉について心配する必要がなくなり、プログラムがブロックwith()の外に移動するとすぐにファイルが自動的に閉じられます。with

with open('data.txt','a') as opener:
    for a in range(3):
        results = 'abcd' + str(a)
        print results
        opener.write(results)
于 2012-07-13T17:25:15.887 に答える