4

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

脚本的其中一个部分是从 .conf 文件中提取配置密钥,并期望有一个可能的选项列表,但是现在只有一个选项,我不确定如何制作,所以有多个选项.

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

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

谢谢!

4

4 回答 4

5

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

设置.conf:

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

设置.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

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

于 2012-07-23T17:30:52.707 回答
0

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

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

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

values = [value.strip() for value in cfg.get('syndication', 'categories').split(',')]
于 2012-07-23T16:32:10.827 回答
0

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

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

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

categories = [option.strip() for option in config.get('syndication', 'categories').split(',')]
于 2012-07-23T16:35:34.630 回答
0

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

于 2012-07-24T05:47:21.450 回答