如何在python配置文件中存储字典和列表?

ego6inou  于 2023-01-24  发布在  Python
关注(0)|答案(4)|浏览(131)

我使用config.ini文件来存储我所有的配置。
我需要在config文件中存储一个字典和一个列表,然后在我的main.py文件中使用configparser解析它,有人能告诉我该怎么做吗?
config.ini:

[DEFAULT] 
ADMIN = xyz 
SOMEDICT = {'v1': 'k1', 'v2': 'k2'}
SOMELIST = [v1, v2]

main.py:

config = configparser.ConfigParser() 
config.read('config.ini') 
secret_key = config['DEFAULT']['ADMIN']

如果没有办法做到这一点,那么json格式的config是一个好的选择吗?

wpcxdonn

wpcxdonn1#

ConfigParser只会将这些元素作为字符串提供给您,然后您需要解析它们。
作为一种替代方案,YAML是配置文件的一个很好的选择,因为它很容易被人阅读。

DEFAULT:
    ADMIN: xyz
    SOMEDICT:
        v1: k1
        v2: k2
    SOMELIST:
        - v1
        - v2

Python代码应该是

import yaml
with open('config.yml') as c:
    config = yaml.load(c)
config['DEFAULT']['SOMEDICT']
erhoui1w

erhoui1w2#

包含此数据的JSON文件可能如下所示:

{
  "DEFAULT": {
    "ADMIN": "xyz",
    "SOMEDICT": {
      "v1": "k1",
      "v2": "k2"
    },
    "SOMELIST": [
      "v1",
      "v2"
    ]
  }
}

然后在python中:

import json

with open('config.json') as f:
    config = json.load(f)
z9ju0rcb

z9ju0rcb3#

我建议使用json

json.loads('[1, 2]') #=> [1, 2]
json.dumps([1, 2]) #=> '[1, 2]'
json.loads('{"v1": "k1", "v2": "k2"}') #=> {'v1': 'k1', 'v2': 'k2'}
json.dumps({'v1': 'k1', 'v2': 'k2'}) #=> '{"v1": "k1", "v2": "k2"}'

对于那些使用JSON的字段,您需要在保存之前执行dumps,在阅读之后执行loads
更好的解决方案是对整个配置文件使用JSON:

{
  "DEFAULT": {
    "ADMIN": "xyz",
    "SOMEDICT": {
      "v1": "k1",
      "v2": "k2"
    },
    "SOMELIST": [
      "v1",
      "v2"
    ]
  }
}

然后你可以这样做:

conf = json.load(open('conf.json'))
json.dump(conf, open('conf.json', 'w'))
nnt7mjpx

nnt7mjpx4#

可以从ini文件中存储和读取Dict或List数据

在阅读值之后,你只需要使用内置的**eval()**函数,默认情况下,变量将是字符串类型,eval将检查并将其转换为字典数据类型。

您可以尝试以下代码

dict_data = configur.get("DEFAULT", "SOMEDICT")
dict_data = eval(dict_data)

print(dict_data['v1'])

相关问题