Как остановить повторяющиеся нежелательные значения при зацикливании ConfigParser в Python? - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь использовать configParser для загрузки файлов .ini. Все работает хорошо, пока не дойду до вложенного l oop. Я пытаюсь найти значения ключей в каждом файле, затем в каждом разделе этого файла и распечатать значения пары ключей.

for i in iniFiles:
    config.read(i)        
    for j in config.sections():
        if config.has_option(j, description):
            print(j + ':', config[j][description])

В этом примере iniFiles представляет собой список строк которые содержат пути к каждому файлу, который я пытаюсь просмотреть. description - это ключ, который я пытаюсь найти. Я продолжаю перебирать несколько разных файлов, и по какой-то причине один из файлов продолжает повторяться, когда я распечатываю их значения ключей. Это почему?

1 Ответ

0 голосов
/ 06 февраля 2020

Функция config.read работает не так, как вы, вероятно, думаете. Он обрабатывает указанный вами файл, но он объединяет результат с уже существующим содержимым синтаксического анализатора. Он не реинициализирует содержимое парсера. Поэтому, если вы анализируете несколько файлов, как здесь, каждый новый файл просто объединяет свое содержимое с существующим состоянием анализатора. Вы думаете, что он читает один и тот же файл снова и снова, но этого не происходит. Он просто сохраняет все предыдущие результаты.

Простое решение - прочитать все файлы одновременно, а затем выполнить печать в отдельном l oop. Кроме того, вы можете создать новый (и, следовательно, пустой) экземпляр ConfigParser для каждого файла. Я не знаю, какое решение подойдет вам лучше всего.

К вашему сведению, функция чтения может обработать список имен файлов за один шаг, что исключит ваш внешний l oop. Прочитайте документы для этой функции.

...