使用Service Account读取和下载Google Drive文件的代码总结

学习笔记作者:admin日期:2025-07-21点击:31

摘要:本文介绍了如何使用Python通过Service Account认证访问Google Drive,并列出文件和下载指定文件。包含完整的代码示例、依赖安装说明以及注意事项。

概述

      本文提供了一个完整的Python脚本,用于通过Google Drive API使用Service Account进行认证,并实现列出Google Drive中的文件以及下载指定文件的功能。

认证部分

from google.oauth2 import service_account
from googleapiclient.discovery import build

SCOPES = ['https://www.googleapis.com/auth/drive.readonly']
SERVICE_ACCOUNT_FILE = 'sa.json'

credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)

service = build('drive', 'v3', credentials=credentials)

列出文件

def list_files():
    results = service.files().list(pageSize=10, fields="nextPageToken, files(id, name)").execute()
    items = results.get('files', [])

    if not items:
        print("没有找到文件。")
    else:
        print("文件列表:")
        for item in items:
            print(f"{item['name']} ({item['id']})")
    return items

下载文件

from googleapiclient.http import MediaIoBaseDownload
import io

def download_file(file_id, file_name):
    request = service.files().get_media(fileId=file_id)
    fh = io.FileIO(file_name, 'wb')
    downloader = MediaIoBaseDownload(fh, request)

    done = False
    while not done:
        status, done = downloader.next_chunk()
        print(f"下载进度: {int(status.progress() * 100)}%")

    print(f"文件 {file_name} 下载完成")

主程序逻辑

if __name__ == '__main__':
    items = list_files()
    if items:
        first_file = items[0]
        print(f"正在下载: {first_file['name']} (ID: {first_file['id']})")
        download_file(first_file['id'], first_file['name'])

注意事项

  • 权限问题:Service Account需要被添加为文件或文件夹的协作者,授予“查看者”权限。
  • 获取文件ID:Google Drive文件链接格式为 https://drive.google.com/file/d/FILE_ID/view,其中 FILE_ID 是所需的文件ID。
  • 大文件下载:使用 MediaIoBaseDownload 支持分块下载,适合大文件。

依赖安装

pip install google-api-python-client google-auth-httplib2 google-auth

上一篇      下一篇