我正在尝试从 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
虽然差别不大(只是带有“-”的行向后退了 2 个空格),但我认为它最终可能会在稍后阶段搞乱配置。
我知道手动添加和删除节目很简单,但是当我使用数据库来获取其他节目信息时,能够编写脚本将节目添加到 flexget 和数据库以及一些其他任务会很方便。
有人知道我做错了什么小事吗?或者这就是 python 中的 pyYaml 的工作原理?
目前我正在考虑对文件进行解析并向以“-”符号开头的每一行添加 2 个空格的可能性。或者将每个节目逐行写入文件(或手头的字符串),并在开头使用正确的间距。
但我认为一定有更好的方法。
最佳答案
我现在刚遇到同样的问题。
我想出了这个:
def writeYaml(data, filename):
sections = data.keys()
dump = yaml.dump(data, default_flow_style=False)
# set 2 indent spaces in every line
out = dump.replace('\n', '\n ')
# re-set indentation for sections only
for i in sections:
out = out.replace('\n %s' % i, '\n%s' % i)
with open(filename, 'w') as yaml_file:
yaml_file.write(out)
关于python - 如何解析并附加到 flexget yaml 配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22971818/