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

如何用Python从Google Drive的SKU文件夹拉取最新xlsx文件

从Google Drive拉取最新Excel文件到Pandas并导出本地文件

为什么你之前用os/requests失败?

个人Google Drive的文件有权限校验,直接拼接普通URL访问会被拒绝,触发400/404错误:

  • 404错误:你输入的gid是Google Sheets专属参数,Excel文件没有这个字段,自然找不到资源
  • 400错误:请求没有携带合法的权限凭证,Google服务器识别为无效请求

下面给两种实用方案,按需选择:


方案1:用gdown快速实现(适合单文件快速拉取)

如果只是手动获取最新文件ID来拉取,这个方法最省心:

  1. 安装依赖:
pip install gdown pandas openpyxl
  1. 把目标Excel文件设置为「知道链接的人可查看」,从共享链接里提取文件ID(比如链接https://drive.google.com/file/d/12345abcXYZ/view里的12345abcXYZ)
  2. 代码实现:
import gdown
import pandas as pd

# 替换成你的文件ID
file_id = "12345abcXYZ"
# 下载到临时路径
temp_file = gdown.download(id=file_id, quiet=False)

# 读入Pandas DataFrame
df = pd.read_excel(temp_file, engine="openpyxl")

# 这里写你的数据转换逻辑
# 示例:删除空行
df = df.dropna(how="all")

# 导出本地文件
df.to_excel("processed_data.xlsx", index=False)
# 或者导出CSV
# df.to_csv("processed_data.csv", index=False, encoding="utf-8-sig")

方案2:用Google Drive API自动获取最新文件(适合定期自动执行)

如果需要每两周自动遍历SKU文件夹、拉取最新Excel,必须用API实现:

前期准备

  1. 去Google Cloud Console创建项目,启用「Google Drive API」
  2. 创建服务账号,下载密钥JSON文件(命名为service_account_key.json)
  3. 把服务账号的邮箱(在密钥JSON里的client_email字段)添加到SKU文件夹的共享成员,赋予「查看」权限

代码实现

from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseDownload
import pandas as pd
import io

# 1. 认证服务账号
SCOPES = ["https://www.googleapis.com/auth/drive.readonly"]
SERVICE_ACCOUNT_FILE = "service_account_key.json"
creds = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES
)
service = build("drive", "v3", credentials=creds)

# 2. 查找SKU文件夹的ID
folder_name = "SKU"
results = service.files().list(
    q=f"name='{folder_name}' and mimeType='application/vnd.google-apps.folder'",
    fields="files(id, name)"
).execute()
folder_id = results["files"][0]["id"]

# 3. 获取文件夹内所有xlsx文件,按修改时间倒序排序
results = service.files().list(
    q=f"'{folder_id}' in parents and mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'",
    fields="files(id, name, modifiedTime)",
    orderBy="modifiedTime desc"
).execute()
files = results.get("files", [])
if not files:
    print("SKU文件夹里没有找到xlsx文件")
else:
    # 取最新的文件
    latest_file = files[0]
    print(f"找到最新文件:{latest_file['name']},修改时间:{latest_file['modifiedTime']}")

    # 4. 下载文件内容到内存
    request = service.files().get_media(fileId=latest_file["id"])
    fh = io.BytesIO()
    downloader = MediaIoBaseDownload(fh, request)
    done = False
    while done is False:
        status, done = downloader.next_chunk()

    # 5. 读入Pandas DataFrame
    fh.seek(0)
    df = pd.read_excel(fh, engine="openpyxl")

    # 数据转换逻辑(示例)
    df = df.drop_duplicates(subset="SKU编号")

    # 6. 导出本地文件
    df.to_excel(f"latest_SKU_data.xlsx", index=False)
    # df.to_csv(f"latest_SKU_data.csv", index=False, encoding="utf-8-sig")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 23:47:45