跳转到主要内容

命令行YAML/XML处理器 - YAML/XML文档的jq包装器

项目描述

安装

pip install yq

在使用 yq 之前,您还需要安装其依赖项,jq。有关详细信息以及针对您平台的特定说明,请参阅 jq安装说明

在macOS上,yq 也可在 Homebrew 上使用:使用 brew install python-yq

概述

yq 接收YAML输入,将其转换为JSON,并将其管道传输到 jq

cat input.yml | yq .foo.bar

类似于 jq,您也可以指定输入文件名作为参数

yq .foo.bar input.yml

默认情况下,不转换 jq 输出。使用 --yaml-output/-y 选项将其转换回YAML

cat input.yml | yq -y .foo.bar

映射键顺序得到保留。默认情况下,输入中的自定义YAML标签样式将被忽略。使用--yaml-roundtrip/-Y选项可以保留YAML标签和样式,通过在JSON中将其表示为封装映射和序列中的额外项目。

yq -Y .foo.bar input.yml

如果需要,yq可以作为模块调用。使用-y/-Y,文件可以像使用sed -i一样就地编辑。

python -m yq -Y --indentless --in-place '.["current-context"] = "staging-cluster"' ~/.kube/config

使用--width/-w选项传递字符串字面量的换行宽度。使用--explicit-start/--explicit-end在处理单个文档时也输出YAML的开始/结束标记。所有其他命令行参数都转发给jq。当没有YAML解析错误时,yq将转发由jq产生的退出代码,否则退出代码为1。有关jq功能和选项的更多信息,请参阅jq手册

因为YAML将JSON视为YAML方言,所以可以使用yq将JSON转换为YAML:yq -y . < in.json > out.yml

使用-Y--yaml-roundtrip)选项保留标签和样式

-Y选项有助于在您的文档中保留自定义字符串样式标签。例如,考虑以下文档(一个AWS CloudFormation模板片段)

Resources:
  ElasticLoadBalancer:
    Type: 'AWS::ElasticLoadBalancing::LoadBalancer'
    Properties:
      AvailabilityZones: !GetAZs ''
      Instances:
        - !Ref Ec2Instance1
        - !Ref Ec2Instance2
      Description: >-
        Load balancer for Big Important Service.

        Good thing it's managed by this template.

将此文档通过yq -y .Resources.ElasticLoadBalancer传递将丢弃自定义标签,例如!Ref,以及样式,例如Description字段的折叠样式。

Type: AWS::ElasticLoadBalancing::LoadBalancer
Properties:
  AvailabilityZones: ''
  Instances:
    - Ec2Instance1
    - Ec2Instance2
  Description: 'Load balancer for Big Important Service.

    Good thing it''s managed by this template.'

相比之下,通过yq -Y .Resources.ElasticLoadBalancer传递将保留标签和样式。

Type: 'AWS::ElasticLoadBalancing::LoadBalancer'
Properties:
  AvailabilityZones: !GetAZs ''
  Instances:
    - !Ref 'Ec2Instance1'
    - !Ref 'Ec2Instance2'
  Description: >-
    Load balancer for Big Important Service.

    Good thing it's managed by this template.

-Y模式下实现这一点,yq在其文档的JSON表示中携带任何自定义标签或样式的额外元数据(映射对和序列值)。当将JSON转换回YAML时,它解析此元数据,重新应用标签和样式,然后丢弃额外的对和值。

yq不支持将YAML注释传递给jq使用的JSON表示,或往返这些注释。

XML支持

yq 同样支持 XML。该 yq 软件包安装了一个可执行文件 xq,它使用 xmltodict 将 XML 转换为 JSON,并将其通过管道传递到 jq。可以使用 xq --xml-output/xq -x 选项进行往返转换。可以将多个 XML 文档作为 xq a.xml b.xml 的形式通过单独的文件/流传递。如果想要确保特定的 Python 运行时,请使用 python -m yq.xq。实体扩展和 DTD 解析被禁用,以避免 XML 解析漏洞。

TOML 支持

yq 也支持 TOML。该 yq 软件包安装了一个可执行文件 tomlq,它使用 tomlkit 库 将 TOML 转换为 JSON,然后通过管道传递到 jq。可以使用 tomlq --toml-output/tomlq -t 选项进行往返转换。如果想要确保特定的 Python 运行时,请使用 python -m yq.tomlq

作者

  • Andrey Kislyuk

许可证

基于 Apache 许可证 2.0 版本授权。

https://github.com/kislyuk/yq/workflows/Python%20package/badge.svg https://codecov.io/github/kislyuk/yq/coverage.svg?branch=master https://img.shields.io/pypi/v/yq.svg https://img.shields.io/pypi/l/yq.svg

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

yq-3.4.3.tar.gz (33.2 kB 查看哈希值)

上传时间

构建分布

yq-3.4.3-py3-none-any.whl (18.8 kB 查看哈希值)

上传时间 Python 3

由以下支持