Pergunta

Recentemente, foi introduzido para a biblioteca configparser.Eu gostaria de ser capaz de verificar se cada seção tem pelo menos um valor Booleano definido para 1.Por exemplo:

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

Acima causará um erro.

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

O exemplo acima irá passar.Abaixo alguns pseudo-código que eu tinha em mente:

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)

Perguntas:

1) Como faço para realizar o primeiro loop e iterar sobre as seções do arquivo de configuração?

2) esta É uma boa maneira de fazer isto ou há um caminho melhor?(Se não houver por favor, responda pergunta.)

Foi útil?

Solução

Usando ConfigParser você precisa analisar a sua config.

Após a análise, você receberá todas as seções usando .sections() o método.

Você pode iterar sobre cada seção e uso .items() para obter todos os pares chave/valor de cada seção.

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

Outras dicas

Melhor aposta é a de carregar TODAS as linhas no arquivo em algum tipo de matriz (vou ignorar a questão da quantidade de memória que pode utilizar e se a página através vez disso).

De lá, você sabe que as linhas denotando títulos de seguir um determinado formato, portanto, você pode iterar através de sua matriz para criar uma matriz de objetos que contêm o nome de cabeçalho;a linha de índice (baseado em zero de referência para mestre matriz) e se o que o título tem um valor definido.

De lá, você pode iterar sobre esses objetos em referência cruzada para o mestre da matriz e, para cada rubrica de seleção próxima a "n" linhas de mestre matriz) entre o rumo atual e a próxima.

Neste ponto, você é o indivíduo config valores para essa posição, então você deve ser facilmente capaz de analisar a linha e detectar um valor, então você pode quebrar o ciclo se verdadeira, ou para mais problema de robustez e exclusividade verificar os rubrica de valores a fim de assegurar que APENAS um valor é definido.

Usando essa abordagem, você tem acesso a todas as linhas, com um objeto por título, para o código permanece flexível e funcional.Optimizar depois.

Esperamos que faz sentido e é útil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top