在配置fi中的节上迭代

2024-04-19 05:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近被介绍到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)这是一种好的方法还是有更好的方法?(如果没有,请回答问题一。)


Tags: intestconfigfalseforsizeifcheck
2条回答

使用^{}必须分析配置。

解析之后,您将使用^{}方法获得所有节。

您可以遍历每个部分并使用^{}获取每个部分的所有键/值对。

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

最好的办法是将文件中的所有行加载到某种数组中(我将忽略可能使用多少内存以及是否改为分页的问题)。

然后,您知道表示标题的行遵循某种格式,因此您可以在数组中迭代以创建包含标题名称、行索引(对主数组的零基引用)以及该标题是否具有值集的对象数组。

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

此时,您只需确定该标题的各个配置值,这样您就可以轻松地解析行并检测一个值,然后,如果为true,就可以从循环中中断,或者为了更健壮,对这些标题的值进行独占性检查,以确保只设置了一个值。

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

希望这是有意义和有帮助的。

相关问题 更多 >