相关疑难解决方法(0)

如何解析golang中的通用yaml并保留注释?

我正在使用 golang yaml v3 库。目标是从带有注释的文件中解析任何 yaml(这意味着我没有预定义的结构),能够设置或取消设置结果树中的任何值并将其写回文件。

然而,我遇到了相当奇怪的行为。正如您在下面的代码中看到的,如果传递给 Unmarshal 函数的主要类型是interface{},则不会保留任何注释,并且库使用映射和切片来表示 yaml 的结构。另一方面,如果我使用(在本例中)[]yaml.Node结构,它确实在内部将所有节点表示为yaml.Nodeor []yaml.Node。这或多或少是我想要的,因为它允许保留评论。然而,它不是一个通用的解决方案,因为至少有两种不同的场景 - YAML 以数组开头或以映射开头,我不确定如何优雅地处理这两种情况。

您能否为我指出正确的方向并详细说明为什么图书馆会这样做?

package main

import (
    "fmt"
    "reflect"
    "gopkg.in/yaml.v3"
)

type Document interface{} // change this to []yaml.Node and it will work with comments // change it to yaml.Node and it will not work

var data string = ` # Employee records
-  martin:
    name: Martin D'vloper
    job: Developer
    skills:
      - python
      - perl
      - pascal
-  tabitha:
    name: …
Run Code Online (Sandbox Code Playgroud)

yaml go

7
推荐指数
1
解决办法
7211
查看次数

如何使用python以github操作的格式将字符串列表写入yaml文件

pythonyaml包(版本 5.1.2)能够正确加载以下文件,即使该列表不是用前导编写的-

xx: [x1, x2]
yy: [y1, y2, y3]
Run Code Online (Sandbox Code Playgroud)

加载代码如下

import yaml

with open('some file') as f:
    data = yaml.load(f, Loader=yaml.FullLoader)
Run Code Online (Sandbox Code Playgroud)

此格式用于 github actions 配置 yaml 文件。例如,

on: [push, pull_request]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [2.7, 3.5, 3.6, 3.7, 3.8]
        os: [ubuntu-16.04, ubuntu-18.04]
        node: [6, 8, 10]
Run Code Online (Sandbox Code Playgroud)

但是当我data使用 写入文件时yaml.dump(data, f),它采用-约定,即

xx:
- x1
- x2
yy:
- y1
- y2
- y3
Run Code Online (Sandbox Code Playgroud)

有没有办法强制它变成类似 github-actions 的格式?

有人告诉我default_flow_style,但它并没有给出我想要的。

yaml.dump({"A":[1,2,3],"B":[4,5,6]},default_flow_style=True) …
Run Code Online (Sandbox Code Playgroud)

python formatting yaml github-actions

3
推荐指数
1
解决办法
9437
查看次数

Python yaml 按原样转储表情符号

我正在使用python 3.9.5, 和PyYaml 5.4.1.

\n

t.yml我有一个包含以下内容的文件。

\n
- \xe2\xac\x86\xef\xb8\x8f\n
Run Code Online (Sandbox Code Playgroud)\n

我编写了一个简单的 python 代码,用于读取 yaml 文件并将其转储回来。

\n
import yaml\n\nwith open("t.yml") as file:\n    con = yaml.safe_load(file)\n    print(con)\n    with open("t.yml","w") as file:\n        yaml.dump(con,file)\n
Run Code Online (Sandbox Code Playgroud)\n

代码的输出是:

\n
[\'\xe2\xac\x86\xef\xb8\x8f\']\n
Run Code Online (Sandbox Code Playgroud)\n

转储yaml后,t.yml文件变成这样:

\n
- "\\u2B06\\uFE0F\\U0001F622"\n
Run Code Online (Sandbox Code Playgroud)\n

如何以与我加载的完全相同的格式转储表情符号?

\n

python encoding yaml pyyaml

3
推荐指数
1
解决办法
500
查看次数

标签 统计

yaml ×3

python ×2

encoding ×1

formatting ×1

github-actions ×1

go ×1

pyyaml ×1