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

时间:2014-09-03 05:46:12

标签: 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 个答案:

答案 0 :(得分: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

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