変数を割り当てずにPythonでファイルを閉じるにはどうすればいいですか?

この方法でファイルを開くと、Pythonでファイルを閉じるにはどうすればいいですか?

line = open( "file.txt"、 "r")。readlines()[7]

6
あなたはしません。あなたは、ガベージコレクションの間に、またはプログラムが終了したときに、Pythonを閉じさせます。通常、これは問題ではないため、Pythonのドキュメントの多くのコード例がこのようにしています。
追加された 著者 Tim Pietzcker,
@eryksun:いいえ、それに頼ることはできません!ファイルオブジェクトは参照サイクルの一部である可能性があり、バインディングが有効範囲外になったときに破棄されることはありません。周期的なガベージコレクタがそれを処理して将来的には長い時間がかかるようになるまで、それは生き残ります。
追加された 著者 Björn Lindqvist,
@Tim Pietzcker:CPythonでは参照カウントに依存することができますが、PyPyやJythonなど他の実装では動作しない実装の詳細です。その場合、あまりにも多くのファイルを開くと、利用可能なファイル記述子が使い果たされる可能性があります。
追加された 著者 eryksun,
この答えをチェックしてください。stackoverflow.com/questions/4599980/&hellip ;
追加された 著者 unni,

2 答え

コンテキストマネージャを使用することをお勧めします。これは、ブロックの最後に自動的にファイルを閉じ、garbargeコレクションの実装の詳細に依存しません

with open("file.txt", "r") as f:
    line = f.readlines()[7]
5
追加された
@Tim Pietzckerが以下に書いたもの。私はこの方法を知っていますが、ファイルインスタンスに変数を割り当てずに、タイトルに言及したように、別の方法があるかどうか疑問に思っていました。
追加された 著者 0sh,

いくつかの方法があります。たとえば、 f = open(...)del f を使用するだけです。

Pythonのバージョンでサポートされている場合は、 with 文を使用することもできます:

with open("file.txt", "r") as f:
    line = f.readlines()[7]

これにより、自動的にファイルが閉じます。

EDIT: I don't get why I'm downvoted for explaining how to create a correct way to deal with files. Maybe "without assigning a variable" is just not preferable.

1
追加された
彼は明示的に変数を割り当てないでそれを行う方法を尋ねる。
追加された 著者 Tim Pietzcker,