2016-07-15 39 views
1

說我有一個YAML配置文件,如:在Python和使用變量讀YAML配置文件

test1: 
    minVolt: -1 
    maxVolt: 1 
test2: 
    curr: 5 
    volt: 5 

我可以使用文件讀入到蟒蛇:

import yaml 

with open("config.yaml", "r") as f: 
    config = yaml.load(f) 

然後我就可以訪問變量與

config['test1']['minVolt'] 

風格明智,什麼是從配置文件中使用變量的最佳方式?我將在多個模塊中使用變量。如果我簡單地訪問如上所示的變量,如果重命名了某些內容,我將需要重命名該變量的每個實例。

只是想知道在不同模塊中使用配置文件中變量的最佳或常見做法。

回答

1

你可以這樣做:

class Test1Class: 
    def __init__(self, raw): 
     self.minVolt = raw['minVolt'] 
     self.maxVolt = raw['maxVolt'] 

class Test2Class: 
    def __init__(self, raw): 
     self.curr = raw['curr'] 
     self.volt = raw['volt'] 

class Config: 
    def __init__(self, raw): 
     self.test1 = Test1Class(raw['test1']) 
     self.test2 = Test2Class(raw['test2']) 

config = Config(yaml.safe_load(""" 
test1: 
    minVolt: -1 
    maxVolt: 1 
test2: 
    curr: 5 
    volt: 5 
""")) 

然後用訪問你的價值觀:

config.test1.minVolt 

當您重命名在YAML文件中的值,你只需要在一個地方更改類。

注意: PyYaml還允許您將YAML直接反序列化爲自定義類。然而,爲了達到這個目的,你需要爲你的YAML文件添加標籤,以便PyYaml知道要反序列化的類。我希望你不想讓你的YAML輸入更復雜。

+0

使用GUI界面時的另一個問題。我有一個配置設置選項卡,用戶可以在其中編輯配置文件。我能夠覆蓋yaml配置文件,但是當訪問另一個模塊中的變量時(變量更新後),模塊仍然使用原始值。只有退出GUI並重新啓動程序後,它才使用新值。爲什麼會這樣,我該如何解決它? – camerausb

+0

如果此答案解決了您的問題,請將其標記爲這樣。如果還有其他問題,請創建一個顯示代碼並描述問題的新問題,而不是在此處發表評論。 – flyx