无法使用PyDrive在Google云端硬盘中的文件夹之间移动文件

时间:2017-04-18 21:58:20

标签: python google-drive-api pydrive

我一直在尝试使用PyDrive

将文件从我的google驱动器中的一个文件夹移动到另一个文件夹
file2 = drive.CreateFile({'id': <file id>})
file2['parents']=<destination folder id>
file2.Upload()

是否可以更改此类文件夹?如果没有,请使用PyDrive建议任何替代方案。

5 个答案:

答案 0 :(得分:1)

问这个问题已经有一段时间了,但是对于那些发生的事情,这对我有用。上面的解决方案对我不起作用,但是所做的是我将'kind':'drive#fileLink'更改为'drive#parentReference'。

最终代码如下;

file2 = drive.CreateFile({'id': <file id>})
file2['parents'] = [{"kind": "drive#parentReference", "id": <destination_id>}]
file2.Upload()

这将覆盖文件的父信息,从而有效地模拟Drive UI中的“移至”功能。

答案 1 :(得分:1)

实际效果如何:-

file1 = drive.CreateFile({'id': id_[0]})
file1.Upload()
file1['parents'] = [{"kind": "drive#parentReference", "id": "destination_folder_id"}]
file1.Upload()

说明:-

第 1 行:-

file1 = drive.CreateFile({'id': 'file_id_here'}) #Create's GoogleDriveFile instance

上面的代码行不会从您的文件中导入元数据,以便我们使用:-

第 2 行:-

file1.Upload() #gets metadata of the file 

一旦检索到元数据,我们将第 3 行中的父文件夹 ID 更改为目标文件夹 ID

第 3 行:-

file1['parents'] = [{"kind": "drive#parentReference", "id": "destination_folder_id"}]

现在再次上传以保存更改(第 4 行), 第 4 行:-

file1.Upload()# save and update changes

答案 2 :(得分:0)

parents数组不仅包含每个父文件夹的ID,还包含一个包含其他信息的对象。

因此,您需要更改一行:

file2['parents'] += ['<parent ID>']

为:

file2['parents'].append({"kind": "drive#fileLink", "id": '<parent ID>'})

因此,完整的例子是:

file2 = drive.CreateFile({'id': <file id>})
file2['parents'].append({"kind": "drive#fileLink", "id": '<parent ID>'})
file2.Upload()

您可以找到使用文件夹here的示例。

答案 3 :(得分:0)

PyDrive是Google Drive API的便捷包装器,但是似乎仍有一些方法无法按预期工作。

幸运的是,您仍然可以像下面这样访问here提出的基础Google驱动器api方法:

file_id   = <file id>
new_parent = <new parent id>

files = drive.auth.service.files()
file  = files.get(fileId= file_id, fields= 'parents').execute()
prev_parents = ','.join(p['id'] for p in file.get('parents'))
file  = files.update( fileId = file_id,
                      addParents = new_parent,
                      removeParents = prev_parents,
                      fields = 'id, parents',
                      ).execute()

我刚刚对此进行了测试,如果您使用的是Web UI,则需要刷新页面以查看更改。

请注意,单个文件可以有多个父对象,这对于jQuery画廊之类的功能非常有用。

答案 4 :(得分:0)

这是带有工作代码的 github 存储库的 link