このようなコードを書いた場合このopenはcloseする必要がありますか?
また、必要な場合、どのようにすればいいでしょうか?
Python3
1for line in open('file.txt'): 2 line = line.strip() 3 print (line) 4```import re
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/17 18:43
回答4件
0
必ずcloseの必要がありますか?
放っておいてもガベージコレクションによっていずれクローズされることが期待されます。
しかし明示的に閉じるのが良い習慣です。
通常であれば、ファイルハンドルがありますがこの場合、ファイルハンドルはどちらになりますか?
一旦別の変数に保持するか、with文を使います。
Python
1fin = open('file.txt') 2for line in fin: 3 ... 4 5fin.close()
Python
1with open('file.txt') as fin: 2 for line in fin: 3 ...
以下の二つの理由から、一般には後者が推奨されます。
- closeの書き忘れを防げる
- 例外発生時も、リソースを確実に解放できる
特に後者は見落としがちです。
詳しくはPythonチュートリアルをどうぞ。ほぼ同じことが書いてあります。
7. 入力と出力 - ファイルを読み書きする — Python 3.7.5 ドキュメント
投稿2019/10/17 21:58
編集2019/10/17 22:00総合スコア35668
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/18 08:38
2019/10/19 03:52
0
クローズは、プログラム終了時に自動的にされますので、すぐに実行が終わるプログラムだとクローズしなくても実害はないです。
クローズもせず、with open
も使わない場合の問題点としては、
・オープンしっぱなしのファイルが増えるので、長時間実行するプログラムや、どんどんファイルをオープンする一方のプログラムだと、リソース(メモリや、1プロセスからオープン可能なファイル数の上限)使用量が問題になるかもしれない
・書き込み用のファイルをクローズしないと、「まだファイルに書き込まれていないデータ」がライブラリのバッファ上に残っているかもしれないので、その段階でOSごと落ちたり、プロセスが強制終了されたりすると、「まだファイルに書き込まれていないデータ」が失われる
投稿2019/10/18 12:37
総合スコア85762
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Pythonは詳しくないですが、基本的にFileを指定してOpenした場合、
よほど特殊な言語ではない限り、Closeを対に入れる必要があると思います。
https://tonari-it.com/python-with-file-open-close/
以下上記URLより引用
引用テキストファイルをクローズしないと
・システムのリソースを食ったまま
・ 他のプログラムがファイルにアクセスできなくなる
などのリスクがあります。
Python自体の扱いは触った程度しかないので、PythonでCloseしなくていい理由や場面がある場合、知見として知りたいです
投稿2019/10/17 18:14
総合スコア368
0
1. 閉じることが必須か?
閉じなくても動くので必須ではありませんが、閉じた方がリソースを浪費しないので好ましい、ということだと思います。
2. 閉じ方
1) 手動で閉じる
初めに開くファイルを定義してそれをcloseさせます。ここを参照ください。
※質問のfor文の行に as f:
をくっつけただけだと文法エラーが出て閉じられません(検証済み)。
2) 自動で閉じる
Stack overflowのjfsさんが一行ずつ読み出すならwith
でくくったらいいよ、と回答していますね。with
を抜けるときに自動でclose
されるので忘れ防止にもなります。
投稿2019/10/17 21:40
編集2019/10/17 21:55退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/18 08:33
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。