python - 如何解析并附加到 flexget yaml 配置文件?

标签 python linux configuration yaml

我正在尝试从 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/

相关文章:

linux - 如何在 linux 中编译 Fortran 77 文件?

python - 如何在 C++ 中操作 pybind11::dict

python - 删除python中特殊字符之间的字符串

ruby-on-rails - 如何在 ruby​​ on rails 网页中嵌入 linux bash 终端?

c++ - 在 Linux 或 Windows 上学习 C++?

ruby-on-rails - 除了使用 Rails.env 有其他选择吗?

Python:如何将多个参数传递给属性 getter?

python - Django-cities 退出时显示 "killed"

git - git 中有哪些不同的存储库格式版本(对于 core.repositoryFormatVersion 设置)?

logging - Apache2 具有多个环境集的条件日志记录