Python 如何从大型yaml文件中获取部分数据?
我有一个很大的yaml文件,其中包含一些无用的数据。使用yaml.load()加载此文件时,内存消耗超过了计算机的物理限制。我看不懂。我是否只能读取python dict所需的部分数据?是否有一些库或代码可以解决此问题?使用PyYaml,您可以执行以下操作: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文件,而不
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)
谢谢你的帮助。非常有用。谢谢你的帮助。它非常有用。