问题,我有一个访问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.")
我假设连续多次打开和关闭此文件并不聪明。如果它没有打开并保持打开状态,我该如何只打开一次,如果需要,我可以在内存中访问。
答案 0 :(得分:1)
在没有太多开销的情况下执行此操作的一种方法是使用standard lib's lru_cache
。你可以用它来装饰一个函数,它会记住那个函数的结果(取决于参数,在这种情况下是none)。下次调用该函数时,结果将从内存中的缓存返回,而不是重新执行该函数。
正如您在本示例中所看到的,这对代码的添加非常简单。
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())
在这里我甚至删除文件以证明它确实有效,但我建议你不要:) 如果您运行此代码,您将看到JSON文件的内容打印两次。