【问题标题】:Python 3 , load key value from Yaml as variblePython3,从 Yaml 加载键值作为变量
【发布时间】:2021-08-20 11:27:21
【问题描述】:

我希望在文件夹键下为每个项目创建一个新文件夹,如下所示。 Yaml文件如下

---
software:
  dir: C:/software
folders:
  - bob:
      ip:
        - "192.168.1.5"
        - "192.168.1.6"
      password:
        - kdhkfjhkjdkjfjsikd
  - alice:
      ip:
        - "192.168.1.3"
      password:
        - hfsdkljfdhkjsfkjfsd

Python 代码

from sys import path
import requests
import os
import yaml

with open('config.yaml') as f:
    config = yaml.load(f, yaml.loader.FullLoader)+

for i in config["folders"]:
    for f in i.values():
        print(i)

我只是使用打印来更容易理解数据。 这返回

{'bob': {'ip': ['192.168.103.5', '192.168.103.6'], 'password': ['kdhkfjhkjdkjfjsikd']}}
{'alice': {'ip': ['192.168.105.3'], 'password': ['hfsdkljfdhkjsfkjfsd']}}

现在我想要发生的只是返回文件夹名称,例如鲍勃,爱丽丝。 我尝试了以下方法,但没有成功,谢谢。

for i in config["folders"]:
for f in i.values():
    print(i[0])

返回

print(i[0])
KeyError: 0

【问题讨论】:

    标签: python python-3.x yaml


    【解决方案1】:

    您可以通过以下方式获取文件夹名称:

    import yaml
    
    with open('config.yaml') as f:
        config = yaml.load(f, yaml.loader.FullLoader)
    
    folder_names = [list(folder)[0] for folder in config["folders"]]
    

    【讨论】:

    • 或者只是list(config["folders"])——遍历一个字典就遍历了键。
    • 我已经编辑了我的答案,现在可以使用了吗?
    • @JMA 谢谢你,它工作得很好,我现在终于可以标记为已回答:D
    【解决方案2】:

    您应该始终了解变量的类型。您可以使用type() 函数检查这一点。

    一些例子:

    • type(config) 应该给你<class 'dict'>
    • type(config["folders"]) 应该给你<class 'list'>,因为它是一个字典列表。

    当你这样做时

    for i in config["folders"]:
        print(i[0])
    

    循环中的每个i 对应于列表config["folders"] 的一项,它本身就是一个字典。因此,使用i[0],您尝试使用不存在的键0 访问字典项。

    相反,您可能希望使用以下命令打印字典的第一个键:

    for i in config["folders"]:
        print(list(i.keys())[0])
    

    【讨论】:

    • 谢谢,我可以确认类型与您描述的一样。把戏现在添加到我的书中。但是现在出现以下错误TypeError: 'dict_keys' object is not subscriptable谢谢,我现在可以研究这个了:)
    • 是的,您是对的,您需要先将它们转换为列表。我会改正的。
    【解决方案3】:

    试试这个:

    import yaml
    
    with open('yamer.yaml') as f:
        data = yaml.load(f, Loader=yaml.FullLoader)
    
    data = data.get('folders')
    
    for x in data:
        for i in x.keys():
            print(i)
    

    它基本上从数据字典中“获取”带有键“文件夹”的字典。然后我们可以如上所示遍历它并打印文件夹名称。如果需要,您可以创建一个列表并开始将名称(字符串)附加到它。 谢谢!

    【讨论】:

      猜你喜欢
      • 2019-02-23
      • 2022-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 2017-02-23
      相关资源
      最近更新 更多