在Python模块中存储JSON数据的最佳方法
我正在开发一个Python模块,这个模块里包含了一个很大的JSON文件,这个文件是它依赖的数据之一。我希望Python用户能够把这个JSON文件当作一个Python变量来导入,而其他编程语言的用户也能直接使用这个JSON文件。
所以,我现在想搞清楚,怎样才能让这个JSON对象变得“可导入”。目前,我的解决方案是在__init__.py
文件里:
import json
import os
with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'seals.json')) as f:
seals_data = json.load(f)
这样,Python开发者就可以调用:
from my_module import seals_data
这个方法大致上是可行的,但我觉得这样有点奇怪,我想确认一下有没有更简单的方法来让这个JSON文件可以导入。
1 个回答
2
你的选择可能是将数据以Python结构的形式存储在一个模块中,这样别人可以使用。这种方法的唯一缺点是,任何导入这个模块的代码在使用之前都得等它完成输入输出操作,这样不太理想,尤其是当这个模块被用在不涉及这些数据的地方时。
我建议使用一个类或者函数来“懒加载”这些数据,这样只有在真正需要这些数据的时候才进行输入输出操作。
下面是一个例子:
SEALS_DATA = None
def get_seals_data():
global SEALS_DATA
if SEALS_DATA is None:
SEALS_DATA = json.load(open("%s/seals.json"%(os.path.dirname(__file__))))
return SEALS_DATA
在他们导入这个模块后,直到第一次调用get_seals_data()之前,他们不会有任何延迟。之后的任何调用都应该已经加载了数据。