2011-10-19 38 views
1

以下はConfigParserによって解析されたファイルである:ここでofficial Python wiki for ConfigParser examplesで説明したようにのPython 2.xでのConfigParser複数行の値に空白行を剥離

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

4 
5 

7 

ヘルパー関数は、次のとおり

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 

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

答えて

1

更新:私があなたに与えたリンクはPython 3.0でした。私の謝罪はあなたのタグを忘れました。

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

見る(Pythonの3のように見えます)このSOの質問:documentationからHow to read multiline .properties file in python


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

私はこれが何をしたいことはなんとかですかどうかわからを参照するのではなく、何パーサモード」を知りません。

一方、ドキュメントにはempty_lines_in_valuesオプションも記載されています。これは、空白行がサポートされていると思われるようです。です。 私はやや矛盾しているようです。それを修正するために

+0

おかげで、しかし、あなたはすでに実現として、私は、Python 2.7を使用しています。残念ながら、Python 2.7用のConfigParserに_empty_lines_in_values_はありません。 – paragbaxi

+0

@ ghee22:標準ライブラリに限定されていないなら、私が与えたSOのリンクで述べたようにConfigObjを使うことができます。 3重引用符を使用して値を囲むことができます。ここにはドキュメントがあります:http://www.voidspace.org.uk/python/configobj.html#the-config-file-format – jwd

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 
関連する問題