在 Python 模块中存储 JSON 数据的最佳方式

mli*_*ner 5 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)
Run Code Online (Sandbox Code Playgroud)

然后Python开发者可以调用:

from my_module import seals_data
Run Code Online (Sandbox Code Playgroud)

它或多或少有效,但这对我来说感觉很奇怪,我想确保没有更干净的方法来使 json 可导入。

小智 2

您的选择可能是将数据作为 python 结构存储在模块中供某人使用的最佳方式。我认为它的唯一缺点是导入该模块的任何内容都必须等待它执行 IO,这并不理想,尤其是如果该模块曾经用于不涉及该数据的事情。

我将使用一个类或函数来延迟加载该数据,从而仅在请求该数据时才允许 IO 命中进行偏移。

这是一个例子:

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
Run Code Online (Sandbox Code Playgroud)

导入模块后,直到第一次调用 get_seals_data() 之前,他们不会有任何交易。此后的任何调用都应该已经加载了数据。