【发布时间】:2015-12-13 14:06:39
【问题描述】:
我对 YAML 和 Python 都很陌生。我正在尝试列出我的 YAML 文件中的所有键和值。但想不出办法。感谢帮助。
YAML 文件
---
Task_T0:
-
args:
task_path: "..."
executor:
type: "T0"
Task_T1:
-
args:
task_path: "~/task_file"
executor:
type: "T1"
data:
params:
p1: 0
我想列出所有节点(Task_T...)。 这是我尝试过的,因为我找不到任何 API 这样做:
parsed_task = yaml.safe_load(rendered_task)
for task_obj in enumerate(parsed_task):
path = task_obj[0]["args"]["task_path"]
print("task path::" + path)
我收到此错误:
'int' object has no attribute '__getitem__'
如果我将代码修改为:
parsed_task = yaml.safe_load(rendered_task)
for task_obj in enumerate(parsed_task):
path = task_obj["args"]["task_path"]
print("task path::" + path)
然后我收到此错误:
tuple indices must be integers, not str
【问题讨论】:
-
您至少可以发布一些代码,向我们展示您的尝试吗?如果您真的无法完全理解 pyyaml,请参阅:PyYAML doc
-
添加了我尝试过的代码。请不要责怪我糟糕的 python 编码。
-
没关系,你是来学习的。没有人在这里责怪人们。可以请您发布所有代码吗?
rendered_task不存在。通过发布一个可运行的示例,尝试使其更易于使用以提供帮助。 -
python 代码无效,您必须缩进
for ....:后面的行。如果你想要所有的键和值,你必须创建一个函数,如果它们是序列或映射,则递归调用自身的值,因为它们可以包含更多的键值对。 -
您使用的单个
-被 YAML 解释为 sequence 元素。要么删除它(这样你的代码就可以工作了),要么使用task_obj[0]["args"]["task_path"]来访问相应的字段。