在Python中,我们是否需要使用open关闭文件?

4
根据我在网上阅读的内容,以下是Python读取包含整数数据的二进制文件的示例:
in_file = open('12345.bin', 'rb');
x = np.fromfile(in_file, dtype = 'int32');

在Matlab中,我认为对应的命令是:
in_file = fopen('12345.bin', 'rb');
x = fread(in_file, 'int32');
fclose(in_file);

在Matlab中,完成使用文件后应使用fclose关闭文件。在NumPy中是否有相应的操作?

2
在Python中,关闭文件的命令是in_file.close()。然而,如果你忘记了这个步骤,当函数返回时,Python会自动关闭文件。 - inspectorG4dget
3
当你在Python中打开文件时,操作系统使用一个句柄来跟踪与该文件的所有活动。如果您没有显式地关闭文件,这些句柄可能会保持打开状态,因为Python解释器必须等待垃圾回收来清理它们。这可能会导致打开太多文件,并且可能会导致出现内存泄漏或其他意外行为。因此,明确关闭文件是重要的最佳实践。 - Padraic Cunningham
1
@inspectorG4dget:CPython会关闭文件,但这并不是一般语言的保证(PyPy、Jython和IronPython可能在某个时间点关闭文件,但不具备可预测性)。 - ShadowRanger
2个回答

12

Python中的等价代码是in_file.close()。虽然关闭您打开的任何文件始终是一个好习惯,但Python更为宽容 - 它将自动关闭在函数返回时打开的任何文件句柄(或者如果您在函数外部打开文件,则在脚本完成时关闭文件)。

另一方面,如果您喜欢使用Python的嵌套缩进范围,则可以考虑执行此操作(Python 2.7有效):

with open('1234.bin', 'rb') as infile:
    x = np.fromfile(infile, dtype='int32')
# other stuff to do outside of the file opening scope

编辑: 正如@ShadowRanger指出的那样,CPython将在函数返回/脚本结束时自动关闭文件句柄。 其他版本的Python也会这样做,但不是在可预测的时间/方式。


3

您需要关闭已打开的文件:

f=open('file')
f.close()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接