2016-05-17 4 views
0

I次のPythonありますPyYAMLとYAMLのload_all

class Instrument: 
    def quandl_get(self): 
     return quandl.get(self.quandl) 

def yaml_load_all(name): 
    with open('yaml/' + str(name) + '.yaml', 'r') as ymlfile: 
     return list(yaml.load_all(ymlfile)) 

instruments = yaml_load_all("instruments") 

そして、次のYAML:私は何をしたいことは

!!python/object:v.Instrument 
vstoxx: 
    fractional_contracts: False 
    multiplier: 100 
    slippage: 0.0017 
    per_contract_cost: 0.0211 
    quandl: 'CHRIS/EUREX_FVS1' 
--- 
!!python/object:v.Instrument 
corn: 
    multiplier: 5000 
    symbol: 'zc' 
    months_traded: [3, 5, 7, 9, 12] 
    quandl: 'CHRIS/CME_C2' 
    forecasts: ['ewmac'] 

楽器の辞書があるので、私はinstruments['vstoxx'].quandl_get()を行うことができますが。

YAMLファイルで毎回!!python/object:v.Instrumentを繰り返すことはしません。

現在、私は楽器のリストを取得しています。私は2つのステップを実行し、オブジェクトをリストにロードして、それを辞書にマッピングする必要があると思います。それは本当にきれいな方法ですか?

答えて

0

ファイル内にload_allと複数のドキュメント(---を使用しています)を使用すると、常に別々のデータ要素のリストが表示されます。

!!python/object:v.Instruments 
vstoxx: 
    fractional_contracts: False 
    multiplier: 100 
    slippage: 0.0017 
    per_contract_cost: 0.0211 
    quandl: 'CHRIS/EUREX_FVS1' 
corn: 
    multiplier: 5000 
    symbol: 'zc' 
    months_traded: [3, 5, 7, 9, 12] 
    quandl: 'CHRIS/CME_C2' 
    forecasts: ['ewmac'] 

(トップラインが最後にsが含まれていないしてください)、その後、そのがYAMLがロードされたときには、個々のInstrumentを作成するクラスInstrumentsを実装:あなたは何ができるか

はにYAMLファイルを変更していますインスタンスを作成し、それらを移入し、キーと値のペア(値はInstrumentのインスタンス)を格納する属性self._lookupを持ちます。次に、Instrumentsで作成:

__getitem__(self, key): 
    return self._lookup[key] 
関連する問題