使用pkg_resources在python包的当前分发中加载JSON文件

时间:2016-06-16 22:53:47

标签: python json packages

我正在构建一个具有以下目录结构的包 -

terraai_preprocessing
|setup.py
||MANIFEST.in
|terraai_preprocessing
  |__init__.py
  |combinatorics
  |preprocessing
    |__init__.py
    |config.json
    |pp_main.py
    |pp_helpers.py

我正在尝试使用pkg_resources将config.json加载到pp_helpers.py中,如其他类似问题所述。我确信该文件存在,因为 -

>>print resource_exists('terraai_preprocessing.preprocessing', 'config.json')
>>True

我尝试使用以下内容但最终出现错误,

>>with open(resource_filename('terraai_preprocessing.preprocessing', 'config.json'),'r') as f:
    config = json.load(f)
ValueError: No JSON object could be decoded

 >>config = json.loads(resource_filename('terraai_preprocessing.preprocessing', 'config.json'))
ValueError: No JSON object could be decoded

 >>config = json.loads(resource_stream('terraai_preprocessing.preprocessing', 'config.json'))
enter code here

 >>config = json.loads(resource_string('terraai_preprocessing.preprocessing', 'config.json'))
ValueError: No JSON object could be decoded

我做错了什么

2 个答案:

答案 0 :(得分:2)

必须如下:

with open('data.json', encoding='utf-8') as data_file:
    data = json.loads(data_file.read())

所以在你的情况下

 config = json.loads(f.read())

答案 1 :(得分:0)

Python无法找到该文件,因为函数resource_filename()返回带有\\的地址作为分隔符。将\\替换为/,就可以找到该文件。

所以我使用了以下代码 -

>> file_location = resource_filename('terraai_preprocessing.preprocessing','config.json').replace('\\',"/")

>> with open(file_location,'r') as f:
      config = json.load(f)