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

使用Python计算Google Drive文件夹大小结果始终为0的问题排查

Google Drive文件夹大小计算结果为0的问题排查与修复

核心问题分析

  1. 未指定API返回size字段
    Google Drive API的files.list接口默认不会返回文件的size属性,你的代码里'size' in item始终为False,导致文件大小无法累加。

  2. 未处理分页数据
    API默认每页最多返回100条结果,如果文件夹内文件/子文件夹数量超过这个数,后续数据会被遗漏,统计结果自然不准确甚至为0。

  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:09:58