3

私は次のようなファイルを読んでいました:

f = [i.strip("\n") for i in open("filename.txt")]

これは問題なく動作します。Web で入手できる従来のファイル読み取りコード サンプル (たとえば、 f = open(...) 、 f.readlines() 、 f.close() の行) よりもクリーンで短いため、私はこの方法を好みます。

ただし、このようなファイルを読み取る場合、たとえば、ファイルを閉じないので、Python インタープリターはこれ自体を処理しますか? このアプローチを使用する際に注意すべきことはありますか?

4

4 に答える 4

3

これは推奨される方法です:

with open("filename.txt") as f:
    lines = [line.strip("\n") for line in f]

他の方法では、入力ファイルを長時間閉じない場合があります。これは、アプリケーションにとって重要ではない場合があります。

このwithステートメントは、ファイルを閉じます。CPython では、ファイル ハンドル オブジェクトをガベージ コレクションするだけでファイルが閉じられるはずですが、他の種類の Python (Jython、IronPython、PyPy) では、これを当てにすることは絶対にできません。また、withステートメントはあなたの意図を非常に明確にし、一般的な慣行に準拠しています.

于 2013-07-22T07:19:58.153 に答える
0

一時的なテストなど、限られた数のケースでは問題ない場合があります。Python は、実行が終了した後にのみファイル ハンドルを閉じます。したがって、このアプローチは適切なアプリケーションには適していません。

于 2013-07-22T07:26:38.327 に答える