【发布时间】:2014-05-23 04:51:20
【问题描述】:
我正在尝试从 flexget 配置文件中解析和添加/删除节目。
我最终计划在节目名称旁边创建一个带有复选框并添加/删除它们的小网页,但首先我需要在我拥有此代码的那一刻完成 yaml 解析:
#!/usr/bin/env python
import yaml
with open("shows.yml") as f:
doc = yaml.safe_load(f)
shows = doc['series']['shows']
sets = doc['series']['settings']
shows.append('new show')
# this makes the list a little neater while printed to the file
showsa = []
for a in test:
showsa.append(a)
testa = {'series': { 'shows': showsa, 'settings': sets }}
with open("showsnew.yml", 'w') as g:
g.write( yaml.dump(testa, default_flow_style=False) )
这会打开旧配置,在列表中添加一个新节目,然后将其打印到文件中,除了输出的配置有点混乱之外,它几乎是完美的:
**What I should get is:** **But instead I get:**
shows: shows:
settings: settings:
shows: shows:
setting1: value setting1: value
setting2: setting2:
- value - value
- value - value
shows: shows:
- show1 - show1
- show2 - show2
- new show - new show
虽然差别不大(只是“-”后面两个空格的行),但我认为它最终可能会在稍后阶段弄乱配置。
我知道手动添加和删除节目很简单,但是当我使用数据库来获取其他节目信息时,能够编写脚本将节目添加到 flexget 和数据库以及其他一些任务会很方便。
有谁知道我做错了什么小事?或者这就是 python 中 pyYaml 的工作方式?
目前我正在考虑对文件进行解析并在以“-”符号开头的每一行添加 2 个空格的可能性。或者在开始时以正确的间距将每个节目逐行写入文件(或之前的字符串)中。
但我认为一定有更好的方法。
【问题讨论】:
标签: python linux configuration yaml