Python 2.x - ConfigParser在多行值中删除空白行

时间:2011-10-19 22:30:25

标签: python configparser blank-line

以下是由ConfigParser解析的文件:

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

 4
 5

 7 

official Python wiki for ConfigParser examples所述,这里是辅助函数:

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 个答案:

答案 0 :(得分:1)

更新:我在下面给出的链接是Python 3.0,我很抱歉忘了你的标签。

2.7文档中未提及值中的空行,因此我怀疑它们根本不受支持。

另请参阅此SO问题(看起来像Python 3):How to read multiline .properties file in python


来自documentation

  

值也可以跨越多行,只要它们是缩进的   比价值的第一行更深。取决于解析器   模式,空行可以被视为多行值的一部分或   忽略。

我不知道这是指'解析器模式',但不确定你想要的是什么。

另一方面,文档还提到了empty_lines_in_values选项,这似乎表明支持空行 。 似乎与我有些矛盾。

答案 1 :(得分:0)

修复它的一种方法是将辅助函数修改为:

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