如何在 python 配置文件中存储字典和列表?
How to store dictionary and list in python config file?
我正在使用 config.ini 文件来存储我的所有配置。
我需要在配置文件中存储一个字典和一个列表,并使用 configparser 在我的 main.py 文件中对其进行解析。谁能告诉我该怎么做?
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 格式的配置是一个好的选择吗?
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']
我建议使用 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'))
包含此数据的 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)
我正在使用 config.ini 文件来存储我的所有配置。
我需要在配置文件中存储一个字典和一个列表,并使用 configparser 在我的 main.py 文件中对其进行解析。谁能告诉我该怎么做?
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 格式的配置是一个好的选择吗?
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']
我建议使用 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'))
包含此数据的 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)