【问题标题】:Can I manipulate yaml files and write them out again我可以操作 yaml 文件并再次将它们写出来吗
【发布时间】:2014-09-25 16:01:48
【问题描述】:

我有一个值映射,键是文件名,值是数组字符串。 我有相应的文件

我将如何加载文件并创建一个包含数组值的固定 yaml 值,无论该值是否已存在

例如

YAML (file.yaml)

trg::azimuth:
-extra
-intra
-lateral

trg::azimuth: 
  [extra,intra,lateral]

来自

红宝石

{"file.yaml" => ["extra","intra","lateral"]}

【问题讨论】:

  • 不清楚您要做什么。 trg::azimuth: 来自哪里?它不在您的示例哈希中,也没有在任何地方解释。
  • trg::azimuth: 是我希望在 yaml 中看到的不会改变的静态值

标签: ruby yaml


【解决方案1】:

YAML documentation 没有很好地介绍它的方法,但确实说

底层实现是 libyaml 包装器 Psych。

Psych documentation 是 YAML 的基础,涵盖读取、解析和发出 YAML。

基本流程如下:

require 'yaml'

foo = {"file.yaml" => ["extra","intra","lateral"]}
bar = foo.to_yaml
# => "---\nfile.yaml:\n- extra\n- intra\n- lateral\n"

下面是生成的序列化 bar 变量的样子:

puts bar
# >> ---
# >> file.yaml:
# >> - extra
# >> - intra
# >> - lateral

这是 YAML 解析器需要的格式:

baz = YAML.load(bar)
baz
# => {"file.yaml"=>["extra", "intra", "lateral"]}

此时哈希已经往返,从 Ruby 哈希到 YAML 序列化字符串,再回到 Ruby 哈希。

使用 Ruby 的 File.write 方法将 YAML 写入文件很容易:

File.write(foo.keys.first, foo.values.first.to_yaml)

foo.each do |k, v| 
  File.write(k, v.to_yaml)
end

这会产生一个名为“file.yaml”的文件,其中包含:

---
- extra
- intra
- lateral

要读取和解析文件,请使用 YAML 的 load_file 方法。

foo = YAML.load_file('file.yaml')
# => ["extra", "intra", "lateral"]

How do I parse a YAML file?”以及此页面右侧的其他“相关”链接可能有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多