该场景下是否需关闭文件?无句柄时如何关闭文件?
关于文件关闭的两个问题解答
问题1:该场景下是否有必要关闭文件?
答案是绝对有必要。不管你是读取、写入还是修改文件,只要打开了文件句柄,就一定要确保它被关闭。系统能同时打开的文件描述符数量是有限的,如果长期不关闭文件,会导致资源泄漏,甚至在程序运行一段时间后抛出“Too many open files”的错误。哪怕是小脚本,养成关闭文件的好习惯也能避免很多潜在问题。
问题2:获取数据后文件会自动关闭吗?若不会,由于fdata并非句柄,该如何关闭文件?
先直接说结论:如果是类似fdata = open("example.txt").read()这种写法,文件不会立即自动关闭。这种情况下,你创建了一个临时的文件对象,但没有把它赋值给变量,这个对象会留在内存里,直到Python的垃圾回收机制偶然清理它时才会触发关闭操作——而这个时机是完全不可控的,可能是几秒后,也可能是程序结束前。
但这里的问题在于,fdata是文件里的内容(字符串或者字节数据),根本不是文件句柄,所以你没办法通过fdata来关闭文件。那怎么解决?
最稳妥的方案是用Python的上下文管理器(with语句),它会在代码块结束时自动帮你关闭文件,完全不用手动操心:
with open("example.txt", "r") as f: fdata = f.read() # 到这里文件已经自动关闭了,fdata就是读取到的内容
如果已经不小心用了临时对象的写法,其实没有办法手动关闭那个文件句柄——因为你根本没保存它的引用。这时候只能依赖垃圾回收,或者直接重启程序(当然这是下下策)。所以重点还是从一开始就用with语句,这是Python处理文件操作的最佳实践。
内容的提问来源于stack exchange,提问作者SJPRO
相关产品推荐
相关产品推荐

