2014-02-08 163 views
1

我想直接將一些來自YAML的配置參數映射到Python參數名稱。只是想知道如果沒有編寫額外代碼(之後修改密鑰)是否有方法讓YAML解析器在帶有下劃線'_'的密鑰中替換破折號' - '。當與PyYAML解析PyYAML用下劃線替換鍵中的短劃線

some-parameter: xyz 
some-other-parameter: 123 

應該成爲(或者可以是其它IIb)的一個詞典與值:

{'some_parameter': 'xyz', 'some_other_parameter': 123} 

比我可以通過字典中的功能作爲命名的參數:

foo(**parsed_data) 

我知道我可以通過鍵迭代並修改它們的值,但我不想那麼做:)

回答

3

至少對於你所說的情況,你不需要改變密鑰。鑑於:

import pprint 

def foo(**kwargs): 
    print 'KWARGS:', pprint.pformat(kwargs) 

如果你設置:

values = { 
    'some-parameter': 'xyz', 
    'some-other-parameter': 123, 
} 

然後調用:

foo(**values) 

你得到:

KWARGS: {'some-other-parameter': 123, 'some-parameter': 'xyz'} 

如果你的目標是實際上是調用功能如下:

def foo(some_parameter=None, some_other_parameter=None): 
    pass 

然後確定,您需要映射鍵名稱。但是,你可能只是這樣做:

foo(**dict((k.replace('-','_'),v) for k,v in values.items())) 
+0

我的目標是獲得第二種情況並獲得配置中評估的所需密鑰免費=>無默認值。 (這是我不想做的事情;)這是我不想做的事情;)這是我不想做的事情;)這是我不想做的事情;)即後期處理。我同意有某種即時解決方案,其中一些lambda函數可能在存儲密鑰之前轉換密鑰... – ovanes

0

我想我找到了一個解決方案:有一個被稱爲yconf包:https://pypi.python.org/pypi/yconf

我可以映射有值,並使用衆所周知的argparse它的工作-interface:

config.yml

logging: 
    log-level: debug 

Argparse像定義:

parser.add_argument("--log-level", dest="logging.log-level")