代码之家  ›  专栏  ›  技术社区  ›  Homunculus Reticulli

如何访问python文件中的属性并保存回文件

  •  -1
  • Homunculus Reticulli  · 技术社区  · 7 年前

    我使用的是python3.5,希望将我的应用程序配置存储在Python文件中(例如。设置.py).

    样品设置.py文件

    ALPHA = 0.1
    BETA = {}
    

    伪码

    import settings as conf
    
    DEFAULT_ALPHA = 0.234
    NEW_BETA = { 1: 2, 2: 'Hello'}
    
    keys = [x for x in dir(conf) if x[0] != '_']
    
    if 'ALPHA' not in keys:
        conf.ALPHA = DEFAULT_ALPHA
    
    if 'BETA' not in keys:
        conf.BETA = {}
    
    
    if not conf.BETA:
        conf.beta = NEW_BETA
    
    
    # How to write new configuration to file?
    

    [[附录]]

    我知道json模块(过去曾多次使用)。不过,我对在django应用程序中看到的代码很感兴趣,该应用程序似乎直接编辑了一个配置文件(django爱好者会识别) settings.py

    我无法确定这些设置是如何被写回文件的,并试图复制它-因此这个问题。FWIW,JSON/YML方法显然是我本来应该采用的方法(在过去已经做过好几次)。

    所以,我的问题仍然是——有没有办法加载python模块,修改它,然后将它(模块)保存回文件?

    实际上,这在很多情况下都是有用的。一个这样的例子是django应用程序,它在安装时实际上对设置.py-因此不需要在中添加应用程序 INSTALLED_APPS 变量 无需手动将应用程序配置添加到 .

    这将有助于在django项目中部署新的应用程序,而不必使用当前的解决方法,比如不同版本的设置.py(例如,用于在Dockerfile中复制),甚至需要手动修改设置.py文件。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Frieder    7 年前

    我建议不要直接导入配置文件,而是写入函数以加载和保存配置(使用json):

    import json
    
    def loadConfig():
        with open('config.py', 'w+') as configFile:
            try:
                config = json.loads(configFile.read())
            except ValueError:
                config = {}
            except:
                raise
            return config
    
    def saveConfig(config):
        with open('config.py', 'w+') as configFile:
            configFile.write(json.dumps(config))
    
    config = loadConfig()
    config["foo"] = "bar"
    saveConfig(config)
    

    或者只使用一个现成的模块,它将为您处理配置文件。

        2
  •  0
  •   Daniel Roseman    7 年前

    如果你想让你的设置是可写的,不要让它们成为Python文件。使用文本格式:.ini很好,因为可以使用 configparser module

    另一种选择是YAML,它对于机器和人类都很容易读写。