给定文件路径在Google云端硬盘中查找文件ID(例如:" MyDrive / Folder1 / Folder2")

时间:2016-01-07 00:58:43

标签: python google-drive-api google-drive-realtime-api

我目前正在开发一个可以在Google云端硬盘中获取文件/文件夹路径的小程序(例如:' MyDrive / Folder1 / Folder2 / Folder3'),并对其进行一些操作(列表,上传,下载,复制等。)

文件夹路径是用户输入的字符串(一个用户,也就是我)。

根据Google Drive API的规定,大多数操作都需要文件/文件夹ID,因此在给定用户的文件路径时,我需要找出文件/文件夹ID。我想要的是一种有效的方法来查找文件/ folderID。注意:在Google云端硬盘中,每个文件都有1个ID(字符串)和1个标题(例如:' folder3',' folder1')。 ID是唯一的。每个文件还有一个父母的名单。

由于调用Google Drive API需要花费大量时间,因此我尝试限制API调用的数量。

现在,在我接受用户输入之前,(1)我调用service.files()。list(),它返回我的Google云端硬盘中所有文件的列表。 (2)循环遍历列表以构造3个字典:FileName-FileID,FileID-FileName,FileID-Parents。

鉴于用户输入:' MyDrive / Folder1 / Folder2',我可以: (1)查找' Folder2'的ID,然后查找其父母的ID。 (2)查找' Folder1'的ID,然后查找其父母的ID。检查" Folder1"的ID是否在' Folder2'的ParentsID中。 (3)查找MyDrive'的ID。检查MyDrive的ID是否在' Folder1'的ID中。

检查后,我可以确保' Folder2的ID是我要查找的ID。

我的问题: 1,你能否提出一个更好的方法来查找我的ID?

2,现在,我想我可以信任用户的输入,只查找Folder2的ID。如果Folder2有超过1个父项,那么我将执行上述过程(遍历路径)。如果Folder2有1个父级,我会停止检查。这对用户是否过于信任?

我对编程很陌生,你能帮助我吗?感谢您的时间和帮助!

2 个答案:

答案 0 :(得分:1)

我不确定它是否最好,但您可以尝试拆分文件夹路径(“myFolder / folder1 / folder2 / ...”)并获取最后一项File resource。资源文件将具有parents[]值(但我不知道它是否包含其文件夹的父项以及通向My Drive root的内容)。

要考虑的另一件事是优化响应,以便更快,更简洁地使用当前的实现。

尝试通过添加过滤器来优化files.list(您可以指定您只打算列出文件夹)。另一个项目是partial responses。这可以通过指定fields参数来完成。

希望这有帮助!

答案 1 :(得分:1)

这是一个很好的起点:

path = 'sample_folder'
folder_query = "title = '%s' and mimeType = '%s'" % (path,
                                                    "application/vnd.google-apps.folder")
folder_list = drive_service.files().list(q=folder_query).execute()
folder_id = folder_list['items'][0]['id']
#(note: this just returns the first search result)

如果路径中有多个文件夹,则需要拆分路径并迭代(例如,获取Folder1的folder_id,然后使用此id获取Folder2的folder_id等)