【问题标题】:How do I parse a yaml string with python?如何使用 python 解析 yaml 字符串?
【发布时间】:2018-10-15 14:27:25
【问题描述】:

我看到了一个 API 和许多关于如何解析 yaml 文件的示例,但是字符串呢?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 仅供参考 YAML 不安全。它容易受到允许用户在您的服务器上执行代码的漏洞youtube.com/watch?v=LrW-HSHP0ws
  • @AlanSTACK 感谢您的提醒,我正在寻找一种快速的方法来尝试一些事情,特别是如何在 yaml 中解析多行字符串。
  • @KlausD。如果有明显的尝试,这句话会更合适。 yaml.load/safe_load 接受的内容是多态的,但是如果所有示例都显示文件,则留给人们寻找其他东西来处理字符串,就像 json 使用 load/loads 一样。很难尝试使用一个不存在的功能,并且没有什么问题......只是问一个问题。

标签: python python-3.x yaml python-2.x


【解决方案1】:

这是迄今为止我看到的最好的方法,用一个例子演示:

import yaml

dct = yaml.safe_load('''
name: John
age: 30
automobiles:
- brand: Honda
  type: Odyssey
  year: 2018
- brand: Toyota
  type: Sienna
  year: 2015
''')
assert dct['name'] == 'John'
assert dct['age'] == 30
assert len(dct["automobiles"]) == 2
assert dct["automobiles"][0]["brand"] == "Honda"
assert dct["automobiles"][1]["year"] == 2015

【讨论】:

  • 我用这个方法的时候dct的类型还是string
  • 您应该使用yaml.safe_load 来处理不受信任的输入
  • 如果你需要安装库,请注意它是pip install pyyamlimport yaml
【解决方案2】:

不需要将字符串包裹在StringIO中,safe_load方法接受字符串:

In [1]: yaml.safe_load("{1: 2}")           
Out[1]: {1: 2}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2011-07-14
    • 2020-07-30
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多