2012-02-10 43 views
2

我使用python ConfigObj加載一個配置文件,它工作的很好,如果配置文件模式爲「cfgName = cfgvalue」。可以python configObj處理一行而不用'='

現在我需要寫配置文件中這樣說:

basket.ini

[favoFruit] 
Apple 
Orange 

可以(如何)加載這個由ConfigObj列表favoFruit['Apple','Orange']

目前我使用cfgObj=ConfigObj('basket.ini')

的YAML或JSON能做到這一點的時候只能得到錯誤信息Invalid line at line "2",我的問題是可以ConfigObj做到這一點?

回答

3

configobj不支持列表中你想使用它們的方式,但作爲逗號分隔值:

[fruit] 
favourite = Apple, Orange 

在你的代碼只需要訪問屬性像往常一樣:

>>> cfg = configobj.ConfigObj('basket.ini') 
>>> cfg['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 2012-02-10 10:41:52