Python 2.x - ConfigParser удаляет пустые строки в многострочном значении - PullRequest
2 голосов
/ 20 октября 2011

Ниже приведен файл, проанализированный ConfigParser :

[Ticket]
description = This is a multiline string.
 1
 2

 4
 5

 7 

Как описано в официальных вики Python для примеров ConfigParser , вот вспомогательная функция:

def ConfigSectionMap(section):
    dict1 = {}
    options = Config.options(section)
    for option in options:
        try:
            dict1[option] = Config.get(section, option)
            if dict1[option] == -1:
                DebugPrint("skip: %s" % option)
        except:
            print("exception on %s!" % option)
            dict1[option] = None
    return dict1

Полученное значение:

>>> print ConfigSectionMap('Ticket')['description']
This is a multiline string.
1
2
4
5
7

Ожидаемое значение:

>>> print ConfigSectionMap('Ticket')['description']
This is a multiline string.
1
2

4
5

7 

Как это исправить?

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Обновление : Ссылка, которую я дал вам ниже, была на Python 3.0, мои извинения я забыл ваш тег.

Документы 2.7 не содержат пустых строк в значениях, поэтому я подозреваю, что они вообще не поддерживаются.

См. Также этот вопрос SO (который выглядит как Python 3): Как читать многострочный файл .properties в python


Из документации :

Значения могут также занимать несколько строк, если они имеют отступ глубже, чем первая строка значения. В зависимости от парсера В этом режиме пустые строки могут рассматриваться как части многострочных значений или игнорироваться.

Я не знаю, к какому «режиму парсера» это относится, но не уверен, выполнимо ли то, что вы хотите.

С другой стороны, в документах также упоминается опция empty_lines_in_values, которая, по-видимому, указывает на то, что поддерживаются пустые строки . Мне кажется несколько противоречивым.

0 голосов
/ 20 октября 2011

Один из способов исправить это - изменить вспомогательную функцию на:

def ConfigSectionMap(section):
    dict1 = {}
    options = Config.options(section)
    for option in options:
        try:
            dict1[option] = Config.get(section, option).replace('\\n', '')
            if dict1[option] == -1:
                DebugPrint("skip: %s" % option)
        except:
            print("exception on %s!" % option)
            dict1[option] = None
    return dict1
...