我一直在尝试使用 PyDrive 将文件从我的谷歌驱动器中的一个文件夹移动到另一个文件夹
file2 = drive.CreateFile({'id': <file id>})
file2['parents']=<destination folder id>
file2.Upload()
是否可以像这样更改文件夹?如果不是,请建议使用 PyDrive 的任何替代方案。
我一直在尝试使用 PyDrive 将文件从我的谷歌驱动器中的一个文件夹移动到另一个文件夹
file2 = drive.CreateFile({'id': <file id>})
file2['parents']=<destination folder id>
file2.Upload()
是否可以像这样更改文件夹?如果不是,请建议使用 PyDrive 的任何替代方案。
自从提出这个问题以来已经有一段时间了,但是对于那些发生在这个问题上的人来说,这对我有用。上面的解决方案对我不起作用,但我将 'kind': 'drive#fileLink' 更改为 'drive#parentReference'。
最终代码看起来像;
file2 = drive.CreateFile({'id': <file id>})
file2['parents'] = [{"kind": "drive#parentReference", "id": <destination_id>}]
file2.Upload()
这将覆盖文件的父信息,有效地模拟 Drive UI 中的“移动到”功能。
PyDrive 是 Google Drive api 的便捷包装器,但似乎仍有一些方法无法按预期工作。
幸运的是,您仍然可以访问此处提出的底层 google drive 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 画廊之类的东西非常有用。
实际有效的方法:-
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
该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()
您可以在此处找到使用文件夹的示例。
这是带有工作代码的 github repo的链接。