将open()作为json.load()参数传递给文件句柄打开吗?

Ale*_*der 8 python json

我编写了一个小型Web应用程序,每次请求都应该打开并读取JSON文件.我为此目的使用pickledb.我关心的是,库open()作为json.load()函数的参数传递.所以它让我思考..

当我写这样的代码时:

with open("filename.json", "rb") as json_data:
    my_data = json.load(json_data)
Run Code Online (Sandbox Code Playgroud)

要么

json_data = open("filename.json", "rb")
my_data = json.load(json_data)
json_data.close()
Run Code Online (Sandbox Code Playgroud)

我很确定文件句柄正在关闭.

但是当我以这种方式打开它时:

my_data = json.load(open("filename.json", "rb"))
Run Code Online (Sandbox Code Playgroud)

文档说,json.load()期待一个.read() -支撑含JSON文档类文件对象.

所以问题是,这个句柄是否会保持开放并且每次请求都会占用更多内存?在这种情况下谁负责关闭手柄?

Sla*_*waj 2

当对象被销毁时,将调用文件的 Close 方法,因为 json.load 只期望输入对象上的 read 方法。

发生什么取决于垃圾收集的实现。您可以在显式关闭文件重要吗?中阅读更多内容。

一般来说,关闭文件是一个很好的做法。