将settings.py配置文件加载到dict中

时间:2012-05-03 21:20:25

标签: python configuration configuration-files

假设我有一个名为settings.py的文件,其内容如下:

{
    "translate_tabs_to_spaces": True,
    "word_wrap": "true",
    "font_face": "Monaco",
    "font_size": 14.0,
    "highlight_line": True,
    "ignored_packages":
    [
        ""
    ],
    "what": '''
            This is python file, not json
            '''
}

如何在主应用程序文件app.py中将其设置为一个名为settings的dict?

感谢。

3 个答案:

答案 0 :(得分:3)

为什么不命名dict说settings而不是从settings.py导入它。

<强> settings.py

settings = {} # fill with your data

像这样使用

>>> from settings import settings
>>> print settings
{}

替代解决方案是在设置模块级别添加变量并直接使用它们,为什么需要dict? e.g。

<强> settings.py

translate_tabs_to_spaces = True
# more settings

像这样使用

>>> import settings
>>> settings.translate_tabs_to_spaces
True

答案 1 :(得分:1)

您可以使用ast.literal_eval()安全地执行此操作。

import ast

data="""\
{
    "translate_tabs_to_spaces": True,
    "word_wrap": "true",
    "font_face": "Monaco",
    "font_size": 14.0,
    "highlight_line": True,
    "ignored_packages":
    [
        ""
    ],
    "what": '''
            This is python file, not json
            '''
}\
"""

print(ast.literal_eval(data))

给我们:

{'what': '\n            This is python file, not json\n            ', 'font_size': 14.0, 'translate_tabs_to_spaces': True, 'font_face': 'Monaco', 'word_wrap': 'true', 'highlight_line': True, 'ignored_packages': ['']}

编辑:

鉴于提问者的新评论表明他希望能够在其配置中使用...ast.literal_eval()适合,它无法处理椭圆。目前尚不清楚这是否是他的意思,这仍然是对所提问题的一个很好的答案。

事实证明提问者正在谈论三重引用的字符串,这些字符串正确处理。

答案 2 :(得分:1)

在设置模块中为设置输入名称,然后将设置模块导入模块并将其加载到变量中,如

import settings
your_settings = settings.settings_dict