gpt4 book ai didi

python - 使用 Python 从 YAML 检索批量数据

转载 作者:行者123 更新时间:2023-12-01 09:28:08 26 4
gpt4 key购买 nike

我有一个如下形式的 yaml 文件:

Solution: 
- number of solutions: 1
number of solutions displayed: 1
- Gap: None
Status: optimal
Message: bonmin\x3a Optimal
Objective:
objective:
Value: 0.010981105395
Variable:
battery_E[b1,1,1]:
Value: 0.25
battery_E[b1,1,2]:
Value: 0.259912707017
battery_E[b1,2,1]:
Value: 0.120758408109
battery_E[b2,1,1]:
Value: 0.0899999972181
battery_E[b2,2,3]:
Value: 0.198967393893
windfarm_L[w1,2,3]:
Value: 1
windfarm_L[w1,3,1]:
Value: 1
windfarm_L[w1,3,2]:
Value: 1

使用Python27,我想从此YAML文件导入所有battery_E值。我知道我可以迭代 Battery_E 字典的键来一一检索它们(我已经使用 PyYAML 执行此操作),但我想避免迭代并一次性完成!

最佳答案

“一次性”是不可能的 - 无论哪种方式仍然会有某种迭代,这是完全可以的。

但是,如果内存是一个问题,您可以在 YAML 加载期间加载感兴趣的键的值:

from __future__ import print_function

import yaml

KEY = 'battery_E'


class Loader(yaml.SafeLoader):
def __init__(self, stream):
super(Loader, self).__init__(stream)
self.values = []

def compose_mapping_node(self, anchor):
start_event = self.get_event()
tag = start_event.tag
if tag is None or tag == '!':
tag = self.resolve(yaml.MappingNode, None, start_event.implicit)
node = yaml.MappingNode(tag, [],
start_event.start_mark, None,
flow_style=start_event.flow_style)
if anchor is not None:
self.anchors[anchor] = node
while not self.check_event(yaml.MappingEndEvent):
item_key = self.compose_node(node, None)
item_value = self.compose_node(node, item_key)
if (isinstance(item_key, yaml.ScalarNode)
and item_key.value.startswith(KEY)
and item_key.value[len(KEY)] == '['):
self.values.append(self.construct_object(item_value, deep=True))
else:
node.value.append((item_key, item_value))
end_event = self.get_event()
node.end_mark = end_event.end_mark
return node


with open('test.yaml') as f:
loader = Loader(f)
try:
loader.get_single_data()
finally:
loader.dispose()

print(loader.values)

但请注意,此代码不会假设 YAML 文件内树中 battery_E 键的位置 - 它只会加载它们的所有值。

关于python - 使用 Python 从 YAML 检索批量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50197426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com