如何将Python字典写入Google Sheets,表头置首行且不覆盖重复
将AdSense报表数据写入Google Sheets的实现方案
现有代码基础
当前已有生成result字典的脚本,原用于打印表头和数据的代码如下:
# 打印表头 for header in result['headers']: print('%25s' % header['name'], end=''), print() # 打印数据 if 'rows' in result: for row in result['rows']: for cell in row['cells']: print('%25s' % cell['value'], end='') print()
需求目标
已完成GCP身份验证,需实现:
- 将
result['headers']中的表头写入Google Sheets首行 - 将
result['rows']中的数据追加写入,且保证数据不重复、不覆盖原有内容
实现步骤与代码
1. 依赖安装
先安装必要的Python包:
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
2. 核心实现代码
替换原打印代码部分,整合报表数据获取与Sheets写入逻辑:
from googleapiclient.discovery import build from google.oauth2 import service_account # 替换为你的实际配置 SERVICE_ACCOUNT_FILE = 'path/to/your/service-account-key.json' SPREADSHEET_ID = 'your-spreadsheet-id' RANGE_NAME = 'Sheet1' # 初始化Sheets API客户端 SCOPES = ['https://www.googleapis.com/auth/spreadsheets'] creds = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES) service = build('sheets', 'v4', credentials=creds) sheet = service.spreadsheets() def get_existing_data(): """获取表格现有数据,用于去重""" result = sheet.values().get(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME).execute() return result.get('values', []) def write_headers(headers): """仅当表格为空时写入表头""" existing_data = get_existing_data() if not existing_data: header_names = [header['name'] for header in headers] body = {'values': [header_names]} sheet.values().update( spreadsheetId=SPREADSHEET_ID, range=f'{RANGE_NAME}!A1', valueInputOption='RAW', body=body ).execute() def append_unique_data(rows): """追加不重复的数据行""" existing_data = get_existing_data() # 跳过表头行(如果存在) existing_rows = existing_data[1:] if existing_data else [] # 转换新数据格式,提取单元格值 new_rows = [] for row in rows: row_values = [cell['value'] for cell in row['cells']] if row_values not in existing_rows: new_rows.append(row_values) # 有新数据则追加 if new_rows: body = {'values': new_rows} sheet.values().append( spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME, valueInputOption='RAW', insertDataOption='INSERT_ROWS', body=body ).execute() # 执行写入操作 write_headers(result['headers']) if 'rows' in result: append_unique_data(result['rows'])
3. 关键逻辑说明
- 表头写入:先检查表格是否为空,仅空表时写入表头,避免重复
- 数据去重:读取现有数据并跳过表头,将新数据转换为统一格式后对比,仅追加未存在的行
- 追加模式:使用
INSERT_ROWS选项,确保新数据添加到现有数据下方,完全不覆盖原有内容
注意事项
- 需给GCP服务账号授予目标Google Sheets的编辑权限
- 替换代码中的配置参数为你的实际文件路径和文档ID
- 若报表有唯一标识列(如日期+广告单元ID),可优化去重逻辑,仅对比唯一列提升效率
内容的提问来源于stack exchange,提问作者Al Azad
相关产品推荐
相关产品推荐

