3

私は通常使用します:

f = open(path,'w')
print >> f, string
f.close()

しかし、私は他のコードで見ました:

print >> open(path,'w'), string

もうまくいきます。

それで、'print' で開いたファイルを閉じる必要はありませんか?

4

1 に答える 1

9

はい、ファイルを閉じる必要があります。printとの違いはありません。

ファイルを閉じると、データがディスクにフラッシュされ、ファイル ハンドルが解放されます。

CPython では、 fの参照カウントがゼロになると、システムがこれを行います。PyPy、IronPython、および Jython では、ガベージ コレクターが実行されるまで待機する必要があります (ファイルを自動的に閉じるため)。メモリ マネージャーによる自動クローズに依存する脆弱な慣行を採用するのではなく、ファイルのクローズを制御することをお勧めします。

ファイルを明示的に閉じることはベスト プラクティスであるため、Python ではファイル オブジェクト用のコンテキスト マネージャーが提供されており、これにより非常に簡単になります。

with open(path, 'w') as f:
    print >> f, string

これにより、 with-statementの本体を離れるとファイルが閉じられます。

于 2013-04-18T16:26:09.123 に答える