到目前为止,我只使用了database.yml,每个参数都显式调出,在下面的文件中使用了一些我不理解的字符.每行和符号(&,*,<<)的含义是什么,我如何阅读此文件?
development: &default
adapter: postgresql
database: dev_development
test: &test
<<: *default
database: test_test
cucumber:
<<: *test
production:
<<: *default
database: test_production
Run Code Online (Sandbox Code Playgroud) alias yaml database-connection ruby-on-rails cross-reference
我想在YAML中合并数组,并通过ruby加载它们 -
some_stuff: &some_stuff
- a
- b
- c
combined_stuff:
<<: *some_stuff
- d
- e
- f
Run Code Online (Sandbox Code Playgroud)
我想将组合数组作为 [a,b,c,d,e,f]
我收到错误:在解析块映射时没有找到预期的键
如何在YAML中合并数组?
假设我有:
base_array:
-1
-2
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做:
my_array: << base_array
-3
Run Code Online (Sandbox Code Playgroud)
所以my_array是 [1,2,3]
更新:我应该指定我希望扩展发生在YAML本身内部.
说我有以下YAML文件:
-
key1: value
# and so on...
key99: value
key100:
subkey1: value
# and so on...
subkey100: value
-
key1: value
# and so on...
key99: value
key100:
subkey1: value
# and so on...
subkey100: SOME DIFFERENT VALUE
Run Code Online (Sandbox Code Playgroud)
处理大量相同数据的自然方式是使用锚点,并覆盖更改的键.
问题是,这里的子项不同.有没有一种简单的方法来引用key100['subkey100']改变了?或者我必须在每个级别使用一系列锚点?
即,是否有简写:
- &anchor
key1: value
# and so on...
key99: value
key100: &subanchor
subkey1: value
# and so on...
subkey100: value
-
<<: *anchor
key100:
<<: *subanchor
subkey100: SOME DIFFERENT VALUE
Run Code Online (Sandbox Code Playgroud) 如果我有一个 yaml 文件,其中包含一个带有括号符号 {} 的字符串,与 python f 字符串配合使用,那么如何在此处利用 f 字符串插值?以这个简单的 yaml 文件为例:
# tmp.yaml
k1: val1
k2: val2 as well as {x}
Run Code Online (Sandbox Code Playgroud)
如果x = 'val3',我希望 k2 的值能够反映val2 as well as val3
# app.py
x = 'val3'
with open('tmp.yaml', 'rt') as f:
conf = yaml.safe_load(f)
print(conf)
{'k1': 'val1', 'k2': 'val2 as well as {x}'}
Run Code Online (Sandbox Code Playgroud)
这可以通过格式字符串很容易地完成......
print(conf['k2'].format(x=x))
val2 as well as val3
Run Code Online (Sandbox Code Playgroud)
但如何对 f 字符串执行同样的操作呢?
即有没有办法转换这个例子:
myhash:
- name: name1
value: value1
myhash:
- name: name2
value: value2
Run Code Online (Sandbox Code Playgroud)
进入:
myhash:
- name: name1
value: value1
- name: name2
value: value2
Run Code Online (Sandbox Code Playgroud)
一旦我注意到默认情况下 YAML 将其转换为:
myhash:
- name: name2
value: value2
Run Code Online (Sandbox Code Playgroud) 这是 Ben 帖子的后续内容,有 YAML 语法用于共享列表或地图的一部分,尽管我在合并两个数组后更进一步并第三次继承。
我正在创建一个docker-compose.yml文件并想要做锚点和别名
x-template:
base-template: &base-template
environemt:
FOO=BAR
custom-template-1: &custom-template1
<<: *base-template
environment+:
FOO2=BAR2
services:
service-1:
<<: *custom-template1
Run Code Online (Sandbox Code Playgroud)
但我得到了错误
Unsupported config option for services.service-1: 'environment+'
Run Code Online (Sandbox Code Playgroud)
如果我不使用environment+:的custom-tamplate-1:,如果我定义级别,或者environment+:在service-1:它工作的水平。
我希望结果是
services:
service-1:
environment:
FOO:BAR
FOO2:BAR2
Run Code Online (Sandbox Code Playgroud)
有可能实现我想要的吗?