Python 2.x - ConfigParser在多行值中去除空行
下面是通过 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
选项,这似乎表明空行是被支持的。这让我觉得有点矛盾。