我正在开展一个学术项目,我需要创建一个 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"
键
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()
在简单的后处理步骤中添加。