2

以下はConfigParserによって解析されたファイルです。

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

 4
 5

 7 

公式の 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 

これを修正するにはどうすればよいですか?

4

2 に答える 2

1

更新: 以下に提供したリンクは Python 3.0 へのものでした。タグを忘れてしまったことをお詫びします。

2.7 のドキュメントでは、空白行の値について言及されていないため、まったくサポートされていないと思われます。

この SO の質問 (Python 3 のように見えます) も参照してください: How to read multiline .properties file in python


ドキュメントから:

値の最初の行よりも深くインデントされている限り、値は複数の行にまたがることもできます。パーサーのモードによっては、空白行が複数行の値の一部として扱われるか、無視される場合があります。

これが何の「パーサーモード」を指しているのかわかりませんが、あなたが望むことができるかどうかはわかりません。

一方、ドキュメントにはempty_lines_in_valuesオプションについても言及されており、空白行サポートされていることを示しているようです。私には少し矛盾しているように思えます。

于 2011-10-19T22:51:58.683 に答える
0

これを修正する 1 つの方法は、ヘルパー関数を次のように変更することです。

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
于 2011-10-19T23:19:07.673 に答える