PyYAML YAML load_all 到对象(很好)
PyYAML YAML load_all to Objects (nicely)
我有以下 Python:
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
。
目前我得到了一个工具列表。我想我需要做两个步骤,将对象加载到列表中,然后将它们映射到字典。这真的是最干净的方式吗?
如果您在文件中使用 load_all
和多个文档(使用 ---
来实现),您总是会得到一个单独数据元素的列表。
您可以将 YAML 文件更改为:
!!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
)然后实现一个 class Instruments
,当它加载 YAML 时创建单独的 Instrument
实例并填充它们,并具有存储键值对的属性 self._lookup
(值是 Instrument
的实例)。然后在 Instruments
上创建:
__getitem__(self, key):
return self._lookup[key]
我有以下 Python:
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
。
目前我得到了一个工具列表。我想我需要做两个步骤,将对象加载到列表中,然后将它们映射到字典。这真的是最干净的方式吗?
如果您在文件中使用 load_all
和多个文档(使用 ---
来实现),您总是会得到一个单独数据元素的列表。
您可以将 YAML 文件更改为:
!!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
)然后实现一个 class Instruments
,当它加载 YAML 时创建单独的 Instrument
实例并填充它们,并具有存储键值对的属性 self._lookup
(值是 Instrument
的实例)。然后在 Instruments
上创建:
__getitem__(self, key):
return self._lookup[key]