我最近被引入了库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)这是这样做的好方法还是有更好的方法?(如果没有请回答问题。)

有帮助吗?

解决方案

使用 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
.

其他提示

Best bet is to load ALL the lines in the file into some kind of array (I'm going to ignore the issue of how much memory that might use and whether to page through it instead).

Then from there you know that lines denoting headings follow a certain format, so you can iterate over your array to create an array of objects containing the heading name; the line index (zero based reference to master array) and whether that heading has a value set.

From there you can iterate over these objects in cross-reference to the master array, and for each heading check the next "n" lines (in the master array) between the current heading and the next.

At this point you're down to the individual config values for that heading so you should easily be able to parse the line and detect a value, whereupon you can break from the loop if true, or for more robustness issue an exclusivity check on those heading's values in order to ensure ONLY one value is set.

Using this approach you have access to all the lines, with one object per heading, so your code remains flexible and functional. Optimise afterwards.

Hope that makes sense and is helpful.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top