Python,保存yaml文件后列表元素的格式不正确[重复]

neskvpey  于 2023-04-04  发布在  Python
关注(0)|答案(1)|浏览(203)

此问题在此处已有答案

python yaml.dump bad indentation(2个答案)
20小时前关门了。
我是Python新手,所以我的问题可能很小,但我不知道如何解决它。我需要准备一个小脚本来修改yaml文件。我遇到的问题是,在保存文件后,列表中的元素在输出文件中被移到了左边。
以下是我的虚拟脚本:

import sys
import yaml

filename = sys.argv[1]

with open(filename, 'r') as f:
    # Load the YAML content
    data = yaml.safe_load(f)

# Here will be my logic

with open('newfile.yml', 'w') as f:
    # Write the modified YAML content back to the file
    yaml.dump(data, f, default_flow_style=False, sort_keys=False)

现在它只加载文件并将结果保存到另一个文件中,但保存的结果与原始文件不同。
以下是原始文件的示例:

my_config:
  object1:
    key1: value1
    list_elements:
      - path: 'file.xml'
        mount_point: /deployments/file.xml
      - path: 'another_file.yml'
        mount_point: /deployments/another_file.yml
    key3: value3

下面是保存的结果:

my_config:
  object1:
    key1: value1
    list_elements:
    - path: 'file.xml'
      mount_point: /deployments/file.xml
    - path: 'another_file.yml'
      mount_point: /deployments/another_file.yml
    key3: value3

list_elements中的所有条目都左移了,谁能告诉我为什么会发生这种情况以及如何解决这个问题?我只需要修改文件的特定部分,不想碰其他任何东西。
我使用了yaml.dump中的参数,但没有找到任何可以帮助我的东西。

gojuced7

gojuced71#

看起来pyyaml库在这方面有一个开放的问题-甚至有一个提到的解决方案:

class Dumper(yaml.Dumper):
    def increase_indent(self, flow=False, *args, **kwargs):
        return super().increase_indent(flow=flow, indentless=False)

print(yaml.dump(data, Dumper=Dumper))

https://github.com/yaml/pyyaml/issues/234

相关问题