このようなコードを書いた場合このopenはcloseする必要がありますか?
また、必要な場合、どのようにすればいいでしょうか?
Python3
1for line in open('file.txt'): 2 line = line.strip() 3 print (line) 4```import re
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答4件
7
必ず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総合スコア35634
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
2
クローズは、プログラム終了時に自動的にされますので、すぐに実行が終わるプログラムだとクローズしなくても実害はないです。
クローズもせず、with open
も使わない場合の問題点としては、
・オープンしっぱなしのファイルが増えるので、長時間実行するプログラムや、どんどんファイルをオープンする一方のプログラムだと、リソース(メモリや、1プロセスからオープン可能なファイル数の上限)使用量が問題になるかもしれない
・書き込み用のファイルをクローズしないと、「まだファイルに書き込まれていないデータ」がライブラリのバッファ上に残っているかもしれないので、その段階でOSごと落ちたり、プロセスが強制終了されたりすると、「まだファイルに書き込まれていないデータ」が失われる
投稿2019/10/18 12:37
総合スコア81862
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
1
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総合スコア2835
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
Q&A
受付中
Web上でデータ受け渡しをしてリアルタイムで閲覧できるようにしたい。
回答1
クリップ1
更新
2023/06/09
Q&A
受付中
各位の和を求めるプログラムを書きたい(文字列として扱ってはいけない)
回答2
クリップ0
更新
2023/06/07
Q&A
解決済
タブの切り替え時にふわっと表示させたい。
回答2
クリップ0
更新
2023/06/08
Q&A
解決済
Python スクレイピングができない
回答1
クリップ0
更新
2023/06/07
Q&A
解決済
ハンバーガーメニューの挙動について(transitionが、もとに戻る時には適応されない)
回答2
クリップ0
更新
2023/06/02
Q&A
解決済
掲示板のあいまい検索を実装したいです
回答1
クリップ0
更新
2023/06/09
Q&A
解決済
検索結果が0件のときにエラー文を表示させる
回答1
クリップ0
更新
2023/06/09
Q&A
解決済
htmlの検索フォームにcssを適用させたいです。
回答1
クリップ0
更新
2023/06/02
同じタグがついた質問を見る
Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。