如何用Python或Bash调整YAML文件的空格与空行格式
Bash 解决方案
针对你的需求,可以用sed命令完成两项格式调整:
- 给
more_stuff下的列表项添加两个前置空格 - 在
something块和more_stuff块之间插入空行
执行以下命令即可(替换input.yaml为你的源文件路径,output.yaml为目标输出文件):
sed -e '/^more_stuff:$/,/^\.\.\.$/ s/^- / - /' -e '/^key2: value2$/a\' -e '' input.yaml > output.yaml
命令说明:
/^more_stuff:$/,/^\.\.\.$/:匹配从more_stuff:开始到...结束的行范围s/^- / - /:将范围内行首的-替换为-,实现列表项缩进/^key2: value2$/a\' -e '':在key2: value2行后插入一个空行
如果something块的最后一行不固定,可用更通用的规则——在每个非首项的顶级键(行首无空格且以:结尾)前自动插入空行:
sed -e '/^more_stuff:$/,/^\.\.\.$/ s/^- / - /' -e '/^[^ ].*:$/{x;/./{x;p;x};x}' input.yaml > output.yaml
Python 备选方案(使用PyYAML)
若可接受第三方库,PyYAML能通过加载后重新导出的方式自动规范格式,同时保留原键顺序:
import yaml # 加载YAML数据 with open('input.yaml', 'r', encoding='utf-8') as f: data = yaml.safe_load(f) # 按要求格式写入文件 with open('output.yaml', 'w', encoding='utf-8') as f: yaml.dump( data, f, default_flow_style=False, # 禁用流式格式 indent=2, # 设置缩进为2空格 sort_keys=False, # 保留原有键顺序 explicit_start=True, # 保留开头的--- explicit_end=True # 保留结尾的... )
内容的提问来源于stack exchange,提问作者AsapHogFtw
相关产品推荐
相关产品推荐

