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

2 投票
2 回答
2259 浏览
提问于 2025-04-17 04:39

下面是通过 ConfigParser 解析的文件:

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

 4
 5

 7 

根据 Python官方wiki关于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 个回答

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
1

更新: 我之前给你的链接是关于Python 3.0的,抱歉我忘了你提到的版本。

关于2.7版本的文档没有提到值里面的空行,所以我怀疑它们根本不支持空行。

你也可以看看这个StackOverflow的问题(看起来是关于Python 3的):如何在Python中读取多行的.properties文件


根据文档

值可以跨多行,只要它们的缩进比第一行的值更深。根据解析器的模式,空行可能会被视为多行值的一部分,或者被忽略。

我不太清楚这里提到的“解析器模式”指的是什么,但我不确定你想要的功能是否能实现。

另一方面,文档中还提到了一种empty_lines_in_values选项,这似乎表明空行被支持的。这让我觉得有点矛盾。

撰写回答