Python打开json文件保存在内存中

Whi*_*hia 3 json python-3.x

问题,我有一个应用程序可以访问 json 文件中的数据。现在,每次应用程序需要数据时,我都会像这样打开和关闭文件。

def access_file():
    try:
        with open(my_file, 'r') as json_data:
            json_data = json.load(json_data)
            return json_data
    except FileNotFoundError:
        logging.error("my_file not found.")
Run Code Online (Sandbox Code Playgroud)

我认为连续多次打开和关闭此文件是不明智的。如果它没有打开,我如何只打开它一次并保持打开状态,然后我可以在需要时在内存中访问它。

Sam*_*eau 5

没有太多开销的一种方法是使用标准库的lru_cache. 你可以用它装饰一个函数,它会记住那个函数的结果(取决于参数,在这种情况下没有)。下次调用该函数时,结果将从内存中的缓存中返回,而不是重新执行该函数。

正如您在本示例中所看到的,这只需对您的代码进行极少的添加即可。

import json
from functools import lru_cache

my_file = 'foo.json'

@lru_cache(maxsize=1)
def access_file():
    try:
        with open(my_file, 'r') as json_data:
            json_data = json.load(json_data)
            return json_data
    except FileNotFoundError:
        logging.error("my_file not found.")


print(access_file())

import os
os.remove(my_file)

print(access_file())
Run Code Online (Sandbox Code Playgroud)

在这里,我什至删除了该文件以证明它确实有效,但我建议您不要:) 如果您运行此代码,您将看到 JSON 文件的内容打印两次。