如何通过Google Drive API及Python SDK获取账号文件与目录总数?
用Google Drive Python SDK统计文件与目录总数
嘿,我来帮你搞定这个需求!下面是一步步的实现方案,亲测可行:
1. 前期准备
首先得把依赖和授权配置弄妥当:
- 安装必要的Python库:
pip install google-api-python-client oauth2client - 去Google Cloud Console创建一个新项目,启用Google Drive API,然后下载OAuth 2.0客户端凭据(JSON格式),把它保存为
credentials.json放在你的项目目录里。
2. 完整实现代码
直接上可运行的代码,里面加了详细注释,你可以直接复用:
from googleapiclient.discovery import build from oauth2client.file import Storage from oauth2client.client import OAuth2WebServerFlow from oauth2client.tools import run_flow # 定义授权范围,只读权限就足够完成统计需求 SCOPES = ['https://www.googleapis.com/auth/drive.readonly'] CLIENT_SECRET_FILE = 'credentials.json' APPLICATION_NAME = 'Drive File Counter' def get_authenticated_service(): storage = Storage('drive-auth.json') credentials = storage.get() if not credentials or credentials.invalid: # 从credentials.json里提取你的客户端ID和密钥 flow = OAuth2WebServerFlow(CLIENT_ID='你的客户端ID', CLIENT_SECRET='你的客户端密钥', scope=SCOPES, redirect_uri='urn:ietf:wg:oauth:2.0:oob') # 本地运行时会弹出浏览器让你完成授权,授权后会生成drive-auth.json缓存凭据 credentials = run_flow(flow, storage) return build('drive', 'v3', credentials=credentials) def count_files_and_folders(service): file_count = 0 folder_count = 0 page_token = None # 循环处理分页结果,Drive API默认一次返回1000条,超过数量必须分页获取 while True: # q参数过滤掉已删除到回收站的文件,确保统计准确 results = service.files().list( q="trashed = false", fields="nextPageToken, files(id, mimeType)", pageToken=page_token, pageSize=1000 # 每次请求拉取最大数量,提升效率 ).execute() items = results.get('files', []) for item in items: # 通过MIME类型区分文件夹和普通文件 if item['mimeType'] == 'application/vnd.google-apps.folder': folder_count += 1 else: file_count += 1 page_token = results.get('nextPageToken') if not page_token: break return file_count, folder_count if __name__ == '__main__': service = get_authenticated_service() total_files, total_folders = count_files_and_folders(service) print(f"账号内总文件数:{total_files}") print(f"账号内总目录数:{total_folders}")
3. 关键细节说明
- 授权缓存:第一次运行会弹出浏览器让你登录Google账号授权,授权成功后会生成
drive-auth.json,后续运行无需重复授权。 - 过滤规则:
q="trashed = false"确保只统计未删除的文件,默认会包含所有你有权限访问的共享文件;如果只想统计自己创建的文件,可以把q参数改成q="trashed = false and 'me' in owners"。 - 分页逻辑:因为Drive API单请求最多返回1000条数据,必须通过
nextPageToken循环遍历所有结果,否则会漏掉大量文件。 - 类型区分:Google Drive的文件夹专属MIME类型是
application/vnd.google-apps.folder,其余类型(包括Google Docs、Sheet等云端文档)都归为“文件”统计。
内容的提问来源于stack exchange,提问作者user6943659
相关产品推荐
相关产品推荐

