【问题标题】:How do you insert string quotes when writing key,values to a YAML file with Python?使用 Python 将键、值写入 YAML 文件时如何插入字符串引号?
【发布时间】:2021-10-08 02:16:04
【问题描述】:

我正在尝试更新一个 YAML 文件,其中我有一系列看起来像的键值对

key:
   'A': 'B'
   'C': 'D'

我使用f.truncate(0) 清除文件,然后转储字典,但是在转储字典时,键值对之间没有字符串引号。如何将转储返回文件以呈现字符串引号?

编辑:添加代码


with open(filepath, "r+") as f:
    d = yaml.unsafe_load(f)

    # edit dictionary

    # clear file

    f.seek(0)
    f.truncate(0)

    yaml.dump(d, f, default_flow_style=False, sort_keys=False)

【问题讨论】:

    标签: python yaml


    【解决方案1】:

    您可以通过避免将 YAML 内容加载到本机 Python 对象中来保持原始样式:

    import yaml,sys
    
    input = """
    key:
       'A': 'B'
       'C': 'D'
    """
    
    events = yaml.parse(input)
    yaml.emit(events, sys.stdout)
    
    print("---")
    
    node = yaml.compose(input)
    yaml.serialize(node, sys.stdout)
    

    此代码演示了使用事件 API (parse/emit) 加载和转储 YAML 事件,以及使用节点 API (compose/serialize) 加载和转储 YAML 节点。输出是

    key:
      'A': 'B'
      'C': 'D'
    ---
    key:
      'A': 'B'
      'C': 'D'
    

    如您所见,标量样式被保留了两次。当然,如果您想编辑内容,这很不方便,您需要遍历事件/节点结构才能做到这一点。 This answer 展示了如何实现一个简单的 API 以使用事件 API 将内容附加到您的 YAML。

    有关将 YAML 加载到本机结构时丢失样式信息的原因和时间的详细信息,请参阅this question

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 2021-01-18
      • 2014-05-12
      • 2020-09-10
      相关资源
      最近更新 更多