You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python开发的Telegram Bot中免本地存储访问Google Drive文件?

解决方案

一、无需本地存储凭证文件完成Google Drive授权

可以通过环境变量存储凭证内容替代本地JSON文件,具体实现如下:

  1. 将服务账号的JSON凭证完整内容复制到服务器的环境变量中(比如命名为GOOGLE_SERVICE_ACCOUNT_JSON)
  2. 在Python代码中读取环境变量并解析为字典,直接用于授权,示例代码:
import os
import json
from google.oauth2 import service_account
from googleapiclient.discovery import build

# 从环境变量读取凭证内容并解析
cred_dict = json.loads(os.getenv("GOOGLE_SERVICE_ACCOUNT_JSON"))
credentials = service_account.Credentials.from_service_account_info(
    cred_dict,
    scopes=["https://www.googleapis.com/auth/drive.readonly"]
)

# 构建Drive API客户端
drive_service = build("drive", "v3", credentials=credentials)

如果使用OAuth 2.0授权(非服务账号),也可将客户端ID、刷新令牌等关键信息存入环境变量,直接在代码中构造凭证对象,无需依赖本地文件。

二、无需保存文件直接读取Drive中的xlsx

利用Google Drive API的get_media方法获取文件字节流,通过io.BytesIO包装为类文件对象,直接传给Excel处理库读取,示例代码:

import io
import pandas as pd

def load_drive_xlsx(file_id):
    # 获取文件字节流
    media_request = drive_service.files().get_media(fileId=file_id)
    file_stream = io.BytesIO(media_request.execute())
    
    # 直接读取为DataFrame(pandas示例)
    return pd.read_excel(file_stream)

# 使用示例:替换为你的目标文件ID
xlsx_data = load_drive_xlsx("your_target_file_id")
print(xlsx_data.head())

如果使用openpyxl,同样支持直接传入BytesIO对象:

from openpyxl import load_workbook

file_stream = io.BytesIO(media_request.execute())
workbook = load_workbook(filename=file_stream)
worksheet = workbook.active

内容的提问来源于stack exchange,提问作者Julia Sizova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:34:58