【问题标题】:How to create an array or list in a default.conf file如何在 default.conf 文件中创建数组或列表
【发布时间】:2012-07-19 03:30:39
【问题描述】:

我继承了一个 python 脚本,它从我认为是机器配置文件的 default.conf 文件中提取一些变量。

脚本的其中一个部分是从 .conf 文件中提取配置密钥,并期望有一个可能的选项列表,但是现在只有一个选项,我不确定如何做到这一点是多种选择。

[syndication]
name = Test Name
title = Test Title
categories = Category 1

所以在上面的例子中,配置键是syndication,而我尝试添加多个选项的变量是category

谢谢!

【问题讨论】:

  • 你能显示导致问题的代码段吗?这将(希望)帮助我们弄清楚 conf 文件中应该包含什么。
  • 如果您需要使用 ConfigParser 阅读它,解析列表不是内置的。我最喜欢阅读列表的是这个:stackoverflow.com/a/9735884/1301710。也许您可以切换到另一个配置解析器或一般的 json 来存储和解析您的配置文件wiki.python.org/moin/ConfigParserShootout

标签: python linux configuration webserver


【解决方案1】:

它的工作方式可能与 python 的logging configuration file format 相同?在这种情况下,categories 将是一个逗号分隔的列表(在记录配置文件的情况下,每个项目都指向配置文件中的特定部分)

【讨论】:

    【解决方案2】:

    如果一行的值太少,我会选择用逗号分隔它们,就像其他人举例的那样,否则按照RFC822标准,你可以按制表符开始的行来分割值:

    settings.conf:

    [syndication]
    name = Test Name
    title = Test Title
    categories =
        Category 1
        Category 2
        Category 3
    

    settings.py

    #!/usr/bin/python
    import ConfigParser
    
    config = ConfigParser.ConfigParser()
    
    # Reading
    config.readfp(open('settings.conf'))
    categories = config.get('syndication', 'categories').strip().split('\n')
    
    # Appending
    categories.append('Category 4')
    
    # Changing
    config.set('syndication', 'categories', '\n' + '\n'.join(categories))
    
    # Storing
    config.write(open('settings.conf', 'w'))
    

    您的新 settings.conf

    [syndication]
    name = Test Name
    title = Test Title
    categories = 
        Category 1
        Category 2
        Category 3
        Category 4
    

    注意:你可以在:=之后的第一行放一个值,但作为一个值列表,我认为从第二行开始更“可读”当您必须手动编辑文件时。

    【讨论】:

      【解决方案3】:

      您还没有提到您是如何读取.conf 文件的,所以我假设您使用的是ConfigParser

      我尝试将categories 设置为一个元组并使用ConfigParser.write,并最终在结果文件中以字符串表示元组。这对我来说意味着ConfigParser 不支持多个选项。

      您始终可以手动拆分选项:

      categories = [option.strip() for option in config.get('syndication', 'categories').split(',')]
      

      【讨论】:

        【解决方案4】:

        我认为您在配置文件中没有列表类型。但是,您可以执行逗号分隔值之类的操作:

        [syndication]
        name = Test Name
        title = Test Title
        categories = Category 1, Category 2
        

        然后在您的代码中将值拆分为 ,

        values = [value.strip() for value in cfg.get('syndication', 'categories').split(',')]
        

        【讨论】:

          猜你喜欢
          • 2014-07-12
          • 2014-01-01
          • 1970-01-01
          • 2017-06-17
          • 1970-01-01
          • 2014-10-22
          • 2014-11-18
          • 2020-08-04
          • 2018-09-17
          相关资源
          最近更新 更多