使用Python计算Google Drive文件夹大小结果始终为0的问题排查
Google Drive文件夹大小计算结果为0的问题排查与修复
核心问题分析
未指定API返回
size字段
Google Drive API的files.list接口默认不会返回文件的size属性,你的代码里'size' in item始终为False,导致文件大小无法累加。未处理分页数据
API默认每页最多返回100条结果,如果文件夹内文件/子文件夹数量超过这个数,后续数据会被遗漏,统计结果自然不准确甚至为0。Google原生文件无默认
size
Docs、Sheets这类Google原生应用文件(非文件夹),API默认不返回size值,因为它们是云端格式,若要统计这类文件的实际占用空间,需额外处理导出格式的大小(可选)。
修复后的代码
def get_folder_size(drive_service, folder_id): total_size = 0 page_token = None try: while True: # 指定需要返回的字段,同时处理分页 results = drive_service.files().list( q=f"'{folder_id}' in parents", fields="nextPageToken, files(id, mimeType, size)", pageToken=page_token ).execute() items = results.get('files', []) for item in items: if item['mimeType'] == 'application/vnd.google-apps.folder': # 递归计算子文件夹大小 total_size += get_folder_size(drive_service, item['id']) elif 'size' in item and item['size']: # 确保size字段存在且有效,再累加 total_size += int(item['size']) page_token = results.get('nextPageToken') if not page_token: break except Exception as e: print(f"错误发生: {str(e)}") return total_size
关键修复说明
- 添加
fields参数:明确要求API返回nextPageToken(分页用)和文件的id、mimeType、size字段,确保size能被获取到。 - 分页循环:通过
nextPageToken遍历所有分页数据,不会遗漏任何文件或子文件夹。 - 增强
size校验:增加item['size']判断,避免空字符串转换整数时出现异常。
内容的提问来源于stack exchange,提问作者x0100
相关产品推荐
相关产品推荐

