【问题标题】:How to fetch partial data from a large yaml file?如何从大型 yaml 文件中获取部分数据?
【发布时间】:2018-04-08 23:03:07
【问题描述】:

我有一个包含一些无用数据的大型 yaml 文件。当使用 yaml.load() 加载这个文件时,内存消耗超过了我们电脑的物理限制。我无法阅读它。我是否只能读取 python dict 所需的部分数据?是否有一些库或代码可以解决这个问题?

【问题讨论】:

    标签: python yaml


    【解决方案1】:

    使用 PyYaml,您可以执行以下操作:

    with open("file.yaml", 'r') as handle:
      for event in yaml.parse(handle):
        # handle the event here
    

    这会逐个事件处理 YAML 文件,而不是将其全部加载到数据结构中。当然,您现在需要从事件流中手动解析结构,但这允许您进一步处理部分数据。

    您可以查看 PyYaml 的 Composer implementation,了解它如何从事件构造 Python 对象,以及它期望从事件流中得到什么结构。

    【讨论】:

    • 感谢您的帮助。这非常有用。
    【解决方案2】:

    当您可以控制 YAML 输出的格式时,我发现这是另一种有用的技术。您可以使用“---”分隔符将数据拆分为单独的 YAML 文档,而不是让数据成为单个结构。例如,而不是

    - foo: 1
      bar: 2
    - foo: 2
      bar: 10
    

    你可以这样写:

    foo: 1
    bar: 2
    ---
    foo: 2
    bar: 10
    

    然后使用下面的python代码来解析它:

    with open("really_big_file.yaml") as f:
        for item in yaml.load_all(f):
            print(item)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-06
      • 2013-08-07
      • 2014-09-17
      • 2019-10-15
      • 1970-01-01
      • 2020-07-17
      • 2017-06-01
      • 1970-01-01
      相关资源
      最近更新 更多