2012-02-10 20 views
2

私はpython ConfigObjを使って設定ファイルを読み込みますが、設定ファイルが "cfgName = cfgvalue"の場合はうまく動作します。 (どのように)ConfigObjリストfavoFruit['Apple','Orange']としてこれをロードすることができpython configObjで '='なしの行を処理することができます

basket.ini

[favoFruit] 
Apple 
Orange 

は、今私は、このように設定ファイルを書く必要がありますか? cfgObj=ConfigObj('basket.ini')

YAMLやJSONはこれを行うことができますを使用している場合

現在の私は、エラーメッセージInvalid line at line "2"を得ることができ、私の質問はConfigObjがあまりにもそれを行うことができますか?

答えて

3

configobjはリストにあなたがそれらを使用しようとしている方法をサポートしていませんが、カンマ区切り値として:

>>> cfg = configobj.ConfigObj('basket.ini') 
>>> cfg['fruit']['favourite'] 
['Apple', 'Orange'] 
:あなたのコードで

[fruit] 
favourite = Apple, Orange 

あなただけいつものように属性にアクセスする必要があります

詳細については、articleをご覧ください。

編集:あなたは本当にそれのためにカスタムパーサーを書くのは簡単だろうことに注意してください、あなたの質問と全く同じ形式の設定ファイルをサポートする必要がある場合:

import re 
from collections import defaultdict 

def parse(f): 
    data = defaultdict(list) 
    section = None 
    for line in f: 
     line = line.strip() 
     if not line: 
      continue 
     match = re.match('\[(?P<name>.*)\]', line) 
     if match: 
      section = match.group('name') 
     else: 
      data[section].append(line) 
    return data 

cfg = parse(open('basket.ini')) 
print cfg['favoFruit'] 

出力例:

[ 'アップル'、 'オレンジ']

+1

いいえ、私は '=' の内部を望んでいません。私の質問 'basket.ini'の内容を見てください。 – brike

関連する問題