Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从大型yaml文件中获取部分数据?_Python_Yaml - Fatal编程技术网

Python 如何从大型yaml文件中获取部分数据?

Python 如何从大型yaml文件中获取部分数据?,python,yaml,Python,Yaml,我有一个很大的yaml文件,其中包含一些无用的数据。使用yaml.load()加载此文件时,内存消耗超过了计算机的物理限制。我看不懂。我是否只能读取python dict所需的部分数据?是否有一些库或代码可以解决此问题?使用PyYaml,您可以执行以下操作: with open("file.yaml", 'r') as handle: for event in yaml.parse(handle): # handle the event here 这将逐个事件处理YAML文件,而不

我有一个很大的yaml文件,其中包含一些无用的数据。使用yaml.load()加载此文件时,内存消耗超过了计算机的物理限制。我看不懂。我是否只能读取python dict所需的部分数据?是否有一些库或代码可以解决此问题?

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

with open("file.yaml", 'r') as handle:
  for event in yaml.parse(handle):
    # handle the event here
这将逐个事件处理YAML文件,而不是将其全部加载到数据结构中。当然,您现在需要从事件流手动解析结构,但这允许您不再进一步处理部分数据


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

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

with open("file.yaml", 'r') as handle:
  for event in yaml.parse(handle):
    # handle the event here
这将逐个事件处理YAML文件,而不是将其全部加载到数据结构中。当然,您现在需要从事件流手动解析结构,但这允许您不再进一步处理部分数据


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

当您控制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)

当您控制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)

谢谢你的帮助。非常有用。谢谢你的帮助。它非常有用。