nos*_*nos 3 python formatting yaml github-actions
pythonyaml
包(版本 5.1.2)能够正确加载以下文件,即使该列表不是用前导编写的-
xx: [x1, x2]
yy: [y1, y2, y3]
Run Code Online (Sandbox Code Playgroud)
加载代码如下
import yaml
with open('some file') as f:
data = yaml.load(f, Loader=yaml.FullLoader)
Run Code Online (Sandbox Code Playgroud)
此格式用于 github actions 配置 yaml 文件。例如,
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [2.7, 3.5, 3.6, 3.7, 3.8]
os: [ubuntu-16.04, ubuntu-18.04]
node: [6, 8, 10]
Run Code Online (Sandbox Code Playgroud)
但是当我data
使用 写入文件时yaml.dump(data, f)
,它采用-
约定,即
xx:
- x1
- x2
yy:
- y1
- y2
- y3
Run Code Online (Sandbox Code Playgroud)
有没有办法强制它变成类似 github-actions 的格式?
有人告诉我default_flow_style
,但它并没有给出我想要的。
yaml.dump({"A":[1,2,3],"B":[4,5,6]},default_flow_style=True)
Run Code Online (Sandbox Code Playgroud)
输出是'{A: [1, 2, 3], B: [4, 5, 6]}\n'
正如@Tsyvarev 所指出的,我想要的行为可以通过以下方式触发
yaml.dump({"A":[1,2,3],"B":[4,5,6]}, default_flow_style=None)
Run Code Online (Sandbox Code Playgroud)
官方文档似乎没有定义这种None
行为:
默认情况下,PyYAML 根据集合是否具有嵌套集合来选择集合的样式。如果集合有嵌套集合,它将被分配块样式。否则就会有流动的风格。
如果您希望集合始终以块样式序列化,请将参数设置
default_flow_style of dump()
为False
。