python没关闭文件会怎样_python-是否需要关闭没有引用的文件?

您询问了“基本概念”,因此让我们从头开始:打开文件时,您的程序可以访问系统资源,即程序自身内存空间之外的内容。 基本上,这是操作系统(Unix术语中的系统调用)所提供的一些魔术。 隐藏在文件对象内部的是对“文件描述符”的引用,“文件描述符”是与打开的文件关联的实际OS资源。 关闭文件会告诉系统释放该资源。

作为OS资源,一个进程可以打开的文件数是有限的:很早以前,在Unix上,每个进程的限制约为20个。 现在,我的OS X盒子强加了256个打开文件的限制(尽管这是一个强制性限制,可以提高)。 其他系统可能会设置数千个或数万个限制(在这种情况下,每个用户,而不是每个进程)。 程序结束时,所有资源都会自动释放。 因此,如果您的程序打开了几个文件,对它们进行了处理然后退出,您可能会很草率,并且永远不会知道其中的区别。 但是,如果您的程序将打开数千个文件,则最好释放已打开的文件,以避免超出操作系统限制。

在进程退出之前关闭文件还有另一个好处:如果打开了一个文件进行写入,则关闭该文件将首先“刷新其输出缓冲区”。 这意味着I / O库通过收集(“缓冲”)您写出的内容并将其批量保存到磁盘来优化磁盘使用。 如果将文本写入文件,然后立即尝试重新打开并读取它,而没有先关闭输出句柄,则会发现并非所有内容都已写出。 另外,如果您的程序突然关闭(带有信号,或者有时甚至通过正常退出),则输出可能永远不会刷新。

关于如何释放文件,已经有很多其他答案,因此,这里只是方法的简要列表:

明确表示为with。(对于python新手请注意:别忘了父母!我的学生喜欢写close(),但没有做。)

推荐:隐式地,通过使用with080语句打开文件。 当到达with块的末尾时,即使在异常终止(由于异常)的情况下,也将调用close()081方法。

with

如果您的python引擎实现了引用管理器或垃圾收集器,则隐式包含该引用。 不建议这样做,因为它不是完全可移植的。 有关详细信息,请参见其他答案。 这就是将with语句添加到python的原因。

隐式地,程序结束时。 如果打开了文件进行输出,则可能存在在所有内容都刷新到磁盘之前退出程序的风险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值