基于Python实现YAML凭证OAuth版本更新及表格交互的技术咨询
问题描述
我正在进行一项学术项目,需编写Python脚本完成以下操作:读取credentials.yaml凭证文件,在电子表格的认证列中查找OAuth 1对应值并获取更新后的OAuth 2信息,最终生成包含OAuth 2的新YAML文件。
现有credentials.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"
目标是将oauth_version字段更新为2.0,生成新的YAML文件:
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"
实现方案
1. 安装依赖
处理YAML文件需要pyyaml库,若读取Excel格式的电子表格,还需openpyxl:
pip install pyyaml openpyxl
2. 完整脚本实现
脚本包含读取YAML、从电子表格提取OAuth2信息、更新字段、写入新文件四个核心步骤:
import yaml from openpyxl import load_workbook def update_oauth_credentials(yaml_input_path, excel_path, yaml_output_path): # 读取原YAML凭证文件 with open(yaml_input_path, 'r', encoding='utf-8') as f: creds_data = yaml.safe_load(f) # 从电子表格提取OAuth2版本信息 workbook = load_workbook(excel_path, data_only=True) worksheet = workbook.active # 假设表格第1列是认证类型标识(如"OAuth 1"),第2列是对应OAuth2版本值 target_oauth2_version = None for row in worksheet.iter_rows(min_row=2, values_only=True): if row[0] == "OAuth 1": target_oauth2_version = row[1] break if not target_oauth2_version: raise ValueError("电子表格中未找到OAuth 1对应的OAuth 2版本数据") # 更新oauth_version字段 creds_data['oauth_version'] = float(target_oauth2_version) # 写入更新后的YAML文件,保持原字段顺序 with open(yaml_output_path, 'w', encoding='utf-8') as f: yaml.dump(creds_data, f, sort_keys=False, default_flow_style=False, allow_unicode=True) # 执行脚本 if __name__ == "__main__": update_oauth_credentials( yaml_input_path="credentials.yaml", excel_path="auth_mapping.xlsx", yaml_output_path="updated_credentials.yaml" )
3. 关键细节说明
- YAML处理:使用
yaml.safe_load()避免不安全的代码执行;写入时sort_keys=False确保字段顺序与原文件一致,default_flow_style=False生成易读的块状格式。 - 电子表格适配:根据实际表格结构调整列索引和匹配逻辑,比如若认证类型在第3列,将
row[0]改为row[2]即可;如果无需从表格获取,直接替换为creds_data['oauth_version'] = 2.0即可简化脚本。 - 编码兼容:读取和写入文件时指定
encoding='utf-8',避免中文或特殊字符出现乱码。
内容的提问来源于stack exchange,提问作者rdinil
相关产品推荐
相关产品推荐

