Python 脚本,用于从 yaml 文件读取凭据、读取数据集并更新信息

问题描述 投票:0回答:1

我正在开展一个学术项目,我需要创建一个 python 脚本来更改 yaml 文件中的凭据。该脚本应该读取 yaml 文件,然后在电子表格(身份验证列)中查找 Oauth 1 的值并获取更新的 Oauth 2,最后使用 auth 2 创建一个新的 ymal 文件。我想知道我可以从哪里开始。

我有一个包含以下内容的凭证.yaml。

      name: gcp_credentials_project
      info: 1798
      project_id: acd-univer-proj-mod-pers
      consumer_key: "cfb45ac0098b723f84219e5c12a9532067abf19a7"
      oauth_token: "52871f93b604e239a431de879b3c2e45082768f02d"
      oauth_version: 1.0
      oauth_signature_metho: "HMAC-SHA1"

应如下解析和更新 yaml 文件(oauth_version)。

      name: gcp_credentials_project
      info: 1798
      project_id: acd-univer-proj-mod-pers
      consumer_key: "cfb45ac0098b723f84219e5c12a9532067abf19a7"
      oauth_token: "52871f93b604e239a431de879b3c2e45082768f02d"
      oauth_version: 2.0
      oauth_signature_metho: "HMAC-SHA1"
python yaml dataset pyyaml
1个回答
0
投票

consumer_key
oauth_token
值上的引号是多余的。 如果您需要保留它们,正如您所指出的,您会发现使用 PyYAML 很难做到这一点。 另外 PyYAML 仅支持 YAML 1.1,15 年前就已经过时了。

我建议您使用

ruamel.yaml
进行 YAML 的这种往返(读取/修改/保存)(免责声明:我是该包的作者)。 除了能够保留引号之外,它还保留注释、处理集合和 YAML 1.2

的键
import sys
import pathlib
import ruamel.yaml

file_path = pathlib.Path('input.yaml')
    
yaml = ruamel.yaml.YAML()
yaml.preserve_quotes = True
data = yaml.load(file_path)
data['oauth_version'] = 2.0
# This shows the content, on stdout. To update the file use: yaml.dump(data, file_path)
yaml.dump(data, sys.stdout)

给出:

name: gcp_credentials_project
info: 1798
project_id: acd-univer-proj-mod-pers
consumer_key: "cfb45ac0098b723f84219e5c12a9532067abf19a7"
oauth_token: "52871f93b604e239a431de879b3c2e45082768f02d"
oauth_version: 2.0
oauth_signature_metho: "HMAC-SHA1"

您显示的输入和预期输出有前导空格,我认为这是因为不熟悉 SO 格式。如果这些空格确实需要出现在输出中,则可以使用可选的

transform
参数
dump()
在简单的后处理步骤中添加。

© www.soinside.com 2019 - 2024. All rights reserved.