我已经熟悉如何将对象保存到文件中?
但是,如果我们必须将多个对象(例如哈希)存储到一个文件中,该怎么办?
我尝试YAML.dump(hash)
从代码中的各个位置附加到文件。但是困难的部分是读回它。由于yaml dump可以扩展到多行,因此我必须解析该文件吗?同样,这只会使代码复杂化。有没有更好的方法来实现这一目标?
PS:相同的问题将持续存在Marshal.dump
。因此,我更喜欢YAML
它更易读的内容。
YAML.dump
创建一个Yaml文档。如果文件中同时包含多个Yaml文档,则您将具有Yaml流。因此,当您将多个调用的结果附加YAML.dump
在一起时,您将拥有一个流。
如果您尝试使用来阅读本YAML.load
文档,则只会得到第一个文档。要取回所有文档,可以使用YAML.load_stream
,它将为您提供一个数组,其中包含每个文档的条目。
一个例子:
f = File.open('data.yml', 'w')
YAML.dump({:foo => 'bar'}, f)
YAML.dump({:baz => 'qux'}, f)
f.close
之后,data.yml
将看起来像这样,其中包含两个单独的文档:
---
:foo: bar
---
:baz: qux
您现在可以像这样读回它:
all_docs = YAML.load_stream(File.open('data.yml'))
这会给你一个像这样的数组[{:foo=>"bar"}, {:baz=>"qux"}]
。
如果您不想一次性将所有文档加载到一个数组中,则可以将一个块传递给load_stream
每个文档,并在解析后处理每个文档:
YAML.load_stream(File.open('data.yml')) do |doc|
# handle the doc here
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句