迭代配置文件中的部分

时间:2014-02-27 12:07:02

标签: python file configuration sections configparser

我最近介绍了库configparser。我希望能够检查每个部分是否至少有一个布尔值设置为1.例如:

[Horizontal_Random_Readout_Size]
Small_Readout  = 0
Medium_Readout = 0
Large_Readout  = 0

上述情况会导致错误。

[Vertical_Random_Readout_Size]
Small_Readout  = 0
Medium_Readout = 0
Large_Readout  = 1

上述情况将会过去。下面是我想到的一些伪代码:

exit_test = False
for sections in config_file:
    section_check = False
    for name in parser.options(section):
        if parser.getboolean(section, name):
            section_check = True
    if not section_check:
        print "ERROR:Please specify a setting in {} section of the config file".format(section)
        exit_test = True
    if exit_test:
        exit(1)

问题:

1)如何执行第一个for循环并迭代配置文件的各个部分?

2)这是一个很好的方法吗?还是有更好的方法? (如果没有请回答问题一。)

2 个答案:

答案 0 :(得分:48)

使用ConfigParser,你必须解析你的配置。

解析后,您将使用.sections()方法获取所有部分。

您可以遍历每个部分并使用.items()获取每个部分的所有键/值对。

for each_section in conf.sections():
    for (each_key, each_val) in conf.items(each_section):
        print each_key
        print each_val

答案 1 :(得分:1)

最好的办法是将文件中的所有行加载到某种类型的数组中(我将忽略可能使用的内存量以及是否通过它进行分页的问题。)

然后从那里你知道表示标题的行遵循某种格式,因此你可以迭代你的数组来创建一个包含标题名称的对象数组;行索引(对主数组的零引用)以及该标题是否设置了值。

从那里你可以在交叉引用主数组时迭代这些对象,并且对于每个标题,检查当前标题和下一个标题之间的下一个“n”行(在主数组中)。

此时,您可以查看该标题的各个配置值,这样您就可以轻松地解析该行并检测一个值,如果为true,您可以从循环中断,或者为了更强大,可以排除一个排他性检查这些标题的值,以确保只设置一个值。

使用这种方法,您可以访问所有行,每个标题有一个对象,因此您的代码保持灵活和功能。之后进行优化。

希望这是有道理的,也是有帮助的。