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

According to http://pypy.org/compat.html, CPython will close the file; however PyPy will close the file only when garbage collector runs. So for compatibility and style reasons it is better to close the file explicitly (or using with construct)

于 2013-01-01T02:20:33.880 回答