如何使用Google Drive API一次删除多个文件



我正在开发一个python脚本,该脚本将文件上传到驱动器中的特定文件夹,正如我所注意到的,驱动器api提供了一个很好的实现,但我确实遇到了一个问题,如何一次删除多个文件
我试着从驱动器中获取我想要的文件并整理它们的Id,但没有成功。。。(下面的片段)

dir_id = "my folder Id"
file_id = "avoid deleting this file"
dFiles = []
query = ""
#will return a list of all the files in the folder
children = service.files().list(q="'"+dir_id+"' in parents").execute()
for i in children["items"]:
    print "appending "+i["title"]
    if i["id"] != file_id: 
        #two format options I tried..
        dFiles.append(i["id"]) # will show as array of id's ["id1","id2"...]  
        query +=i["id"]+", " #will show in this format "id1, id2,..."
query = query[:-2] #to remove the finished ',' in the string
#tried both the query and str(dFiles) as arg but no luck...
service.files().delete(fileId=query).execute() 

是否可以删除选定的文件(我不明白为什么不可能,毕竟这是一个基本操作)?

提前感谢!

您可以将多个Drive API请求一起批处理。这样的东西应该使用Python API客户端库:

def delete_file(request_id, response, exception):
  if exception is not None:
    # Do something with the exception
    pass
  else:
    # Do something with the response
    pass
batch = service.new_batch_http_request(callback=delete_file)
for file in children["items"]:
  batch.add(service.files().delete(fileId=file["id"]))
batch.execute(http=http)

如果deletetrash是一个文件夹,它将递归地删除/丢弃该文件夹中包含的所有文件。因此,您的代码可以大大简化:

dir_id = "my folder Id"
file_id = "avoid deleting this file"
service.files().update(fileId=file_id, addParents="root", removeParents=dir_id).execute()
service.files().delete(fileId=dir_id).execute()

这将首先将要保留的文件从文件夹中移出(并移到"我的驱动器"中),然后删除文件夹。

注意:如果您调用delete()而不是trash(),则文件夹及其内的所有文件将被永久删除,并且无法恢复它们!因此,在对文件夹使用此方法时要非常小心。。。

相关内容

  • 没有找到相关文章

最新更新