google-drive-api - 在根目录下删除大量文件
问题描述
我错误地将大量文件保存在我的谷歌驱动器的根目录(> 100k 个文件)。我不能轻易地在线删除它们。
我目前正在尝试使用文件列表 api和文件删除 api来删除它们,它可以工作,但它真的很慢。
此外,我没有找到一种方法来计算根目录下还有多少文件来估计这将花费多少时间。
有没有人有更快的方法来删除文件,或者计算它们的方法?
解决方案
Google Drive REST API 提供了一种一次性发出多个请求的批处理方法,并且比一次发出一个请求完成得更快。您可以在此处查看发出批处理请求的完整参考资料,包括支持语言的代码片段。您可以使用以下 python 代码片段向 Drive REST API 发出批量删除请求:
listOfFileIDs = []
def callback(request_id, response, exception):
if not exception:
print(response)
else:
print(exception)
batch = vals.service.new_batch_http_request(callback = callback)
for file_id in listOfFileIDs:
batch.add(vals.service.files().delete(fileId = file_id))
print(batch.execute())
listOfFileIDs
您应该通过Files: list
请求获取要删除的文件的 ID 列表来进行填充。
- 每个批次最多只能进行 100 次调用,因此您仍然需要向服务器发出多个批次请求
listOfFileIDs
由于此批次限制,最大长度也只能为 100- 与单个请求相比,批量请求更快并且使用的配额更少
您可以在Developer's Console跟踪项目的请求。应用程序配额的礼貌限制是每位用户每 100 秒 1000 个请求,以及您可以在应用程序的配额选项卡上看到的其他一些配额限制。如果您继续接收403: Rate limit exceeded
或403: User rate limit exceeded
.
推荐阅读
- matlab - 如何识别产生特定工作区变量的脚本?
- java - 违反完整性约束 - 在级联上找不到父键
- php - 使用 PHP 创建一个 mySQL 数据库
- python - 如何在列表中找到除 NaN 之外的最后一个有效索引
- php - 触发 onclick 的 DataTable 不绘制 ajax 响应中的数据
- java - 是否有任何 api 可以按某个值过滤所有表列?
- java - 使用正则表达式在打开括号之前删除字符串
- kubernetes-ingress - 如何更改 istio 入口负载均衡器外部 IP
- javascript - 提交时附加值未进入表单
- python - 如何在 Python 中的 3D 三角曲面上绘制插值标量场