1

重複の可能性:
ファイルハンドルは、範囲外になった後、Python で自動的に閉じられますか?

私はpythonが初めてです。ファイルを開いて書き込む場合は、最後に閉じる必要があります。

in_file = open(from_file)
indata = in_file.read()

out_file = open(to_file, 'w')
out_file.write(indata)

out_file.close()
in_file.close()

このようにコードを書くと。

open(to_file, 'w').write(open(from_file).read())

なかなか閉まらないのですが、自動で閉まるのでしょうか?

4

3 に答える 3

8

最終的には閉鎖されますが、いつになるかは保証されません。そのようなことを処理する必要がある場合にこれを行う最良の方法は、次のwithステートメントです。

with open(from_file) as in_file, open(to_file, "w") as out_file:
    out_file.write(in_file.read())

# Both files are guaranteed to be closed here.

参照: http://preshing.com/20110920/the-python-with-statement-by-example

于 2013-01-01T02:16:01.257 に答える
6

Python のガベージ コレクターは、ファイル オブジェクトを破棄するときにファイルを自動的に閉じますが、実際にいつそれが行われるかを制御することはできません (したがって、より大きな問題は、エラーが発生したかどうかがわからないことです /ファイルを閉じるときに例外が発生します)

Python 2.5 以降では、次のwith構造を使用することをお勧めします。

with open("example.txt", 'r') as f:
    data = f.read()

また、ファイルは、何が起こっても、処理が完了した後に閉じられることが保証されています。

于 2013-01-01T02:17:37.017 に答える
1

http://pypy.org/compat.htmlによると、CPython はファイルを閉じます。ただし、PyPy はガベージ コレクターが実行されている場合にのみファイルを閉じます。したがって、互換性とスタイルの理由から、ファイルを明示的に (またはwithコンストラクトを使用して)閉じることをお勧めします。

于 2013-01-01T02:20:33.880 に答える