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

无需下载从谷歌云端硬盘读取xlsx到Pandas遇阻求助

解决方法

错误原因

你直接访问的/export URL未经过服务账号认证,返回的是Google Sheets的登录跳转页面(HTML内容),而非实际的XLSX文件——XLSX本质是压缩包格式,因此openpyxl会抛出zipfile.BadZipFile错误。

解决方案:通过Drive API+服务账号认证获取XLSX流

利用Google Drive API,通过服务账号认证后直接导出并读取XLSX内容,无需下载到本地文件。

1. 安装依赖包

pip install google-api-python-client oauth2client pandas openpyxl

2. 完整代码实现

import pandas as pd
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseDownload
from oauth2client.service_account import ServiceAccountCredentials
import io

# 配置参数
SERVICE_ACCOUNT_KEY_PATH = "你的服务账号密钥文件路径.json"
SHEET_ID = "目标Google Sheet的ID"

# 初始化服务账号认证
scopes = ["https://www.googleapis.com/auth/drive.readonly"]
credentials = ServiceAccountCredentials.from_json_keyfile_name(
    SERVICE_ACCOUNT_KEY_PATH, scopes
)
drive_service = build("drive", "v3", credentials=credentials)

# 导出XLSX格式的文件流
export_request = drive_service.files().export_media(
    fileId=SHEET_ID,
    mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
)
file_stream = io.BytesIO()
downloader = MediaIoBaseDownload(file_stream, export_request)

# 流式下载内容
done = False
while not done:
    status, done = downloader.next_chunk()

# 重置流指针到起始位置,供pandas读取
file_stream.seek(0)

# 读取为DataFrame
df = pd.read_excel(file_stream, engine="openpyxl")
print(df.head())

3. 关键注意事项

  • 权限配置:必须将服务账号密钥文件中client_email字段对应的邮箱,添加为目标Google Sheet的「查看者」或「编辑者」,否则会触发权限不足错误。
  • MIME类型:导出时指定的mimeType是标准XLSX格式,确保返回的是可被openpyxl解析的压缩包内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:12:19