【发布时间】:2018-04-08 23:03:07
【问题描述】:
我有一个包含一些无用数据的大型 yaml 文件。当使用 yaml.load() 加载这个文件时,内存消耗超过了我们电脑的物理限制。我无法阅读它。我是否只能读取 python dict 所需的部分数据?是否有一些库或代码可以解决这个问题?
【问题讨论】:
我有一个包含一些无用数据的大型 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 的 Composer implementation,了解它如何从事件构造 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)
【讨论】: