shell 如何使用Python Niet从YAML中定义的键对值中读取键?

zfycwa2u  于 2023-04-21  发布在  Shell
关注(0)|答案(1)|浏览(108)

我有一个YAML文件,我使用Python niet作为YAML解析器来读取文件。YAML文件看起来像这样-

configuration:
  warehouse: warehouse-name
  database: database-name
  object_type:
      schema:
        schema1: /path/to/schema1.sql
        schema2: /path/to/schema2.sql
      view:
        schema1.view1:/path/to/view1.sql
        schema2.view2:/path/to/view2.sql
      table:
        schema1.table1:/path/to/table1.sql
        schema2.table2:/path/to/table2.sql

现在我可以像这样用niet读取值-

niet ".configuration.object_type.schema.schema1" /path/to/file.yaml

上面的命令将给予输出为-

/path/to/schema1.yaml

但是如果我使用这个命令,它会打印完整的一行作为输出-

niet ".configuration.object_type.schema." /path/to/file.yaml
Output -
schema1: /path/to/schema1.sql
schema2: /path/to/schema2.sql

我需要分别使用键和值,而不仅仅是值。例如,我需要打印object_type schema,后跟schema 1和相应的路径/path/to/schema1.sql。

schema
schema1
/path/to/schema1.sql

我不介意我必须使用3个命令来完成上面的输出。

3phpmpom

3phpmpom1#

目前niet还不允许这种行为。事实上,niet的研究是基于jmespath的。Niet将其所有输入转换为python dict,并使用jmespath查询该dict,因此jmespath知道如何做niet也知道如何做,不幸的是,据我所知jmespath不允许这样做。
你可以尝试这样玩:

$ niet ".configuration.object_type.schema | {schema: join(',', keys(@))}" https://gist.githubusercontent.com/4383/9538953081f2e475903a8208e834b954/raw/97ffc80acc6d9a9293cae44334707419e27fd98f/config

上一个命令输出:

schema: schema1,schema2

也许你会找到一种方法来管道更多的子命令。
现在,基于你的问题,我正在添加additional-objects,以允许通过多个研究,从而允许做出更复杂的输出:
https://github.com/4383/niet/commit/977a617f628de52fffed3a82fc3cd16a24927171
有了这个新功能,我们将能够运行这样的命令:

niet ".configuration.object_type.schema" https://gist.githubusercontent.com/4383/9538953081f2e475903a8208e834b954/raw/97ffc80acc6d9a9293cae44334707419e27fd98f/config -f yaml -a ".configuration.object_type.view" ".configuration.object_type.table"

希望能帮到你。
埃尔韦

相关问题