【问题标题】:How to write config files for python scripts如何为python脚本编写配置文件
【发布时间】:2017-03-15 00:45:38
【问题描述】:

我正在努力提高我编写的脚本的质量,以使它们更易于维护,避免硬编码值。到目前为止,我正在使用一个 json 文件来保存这个值,例如

一个名为 config_test.json 的 json 文件:

{"input_dir":"data/input",
"output_dir":"data/output",
"default_value":10,
"dtypes":["str","int","str","float"]
}

然后我从主文件中读取这些值:

import json
with open('config_test.json') as f:
    config_d = json.load(f)
config_d

default_value =   config_d['default_value']
dtypes =   config_d['dtypes']
input_dir =   config_d['input_dir']
output_dir =   config_d['output_dir']

我对这个解决方案并不完全满意,是否有任何标准方法可以在 python 中编写配置文件?

【问题讨论】:

    标签: python json config


    【解决方案1】:

    使用 pyyaml 让您的生活更轻松

    import yaml
    
    with open("settings.yml", 'r') as stream:
        data = yaml.safe_load(stream)
    

    你的 settings.yml =>

    ip_address : '0.0.0.0'
    sqlite     : 'sqlite:///data.db'
    key        : 'super-secret-hoho'
    
    answers:
        technology: ['option3', 'option3', 'option4', 'option3', 'option3', 'option4', 'option4', 'option2', 'option3', 'option3']
    

    然后用

    访问
    my_not_hardcoded_ip = data['ip_address']
    

    它更好阅读和清洁,我完全推荐它!

    【讨论】:

      【解决方案2】:

      不要忽视用 Python 本身编写配置文件的可能性。

      some_dir/app_config.py

      input_dir = "data/input"
      output_dir = "data/output"
      default_value = 10
      dtypes = "str int str float".split()
      

      bin/app.py

      import argparse
      import app_config as config
      
      parser = argparse.ArgumentParser()
      parser.add_argument('--inputdir', default=config.input_dir)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-13
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        • 1970-01-01
        • 2016-08-11
        • 2010-09-21
        相关资源
        最近更新 更多