Google Drive SDK:我想更新文件,而不是创建新文件

时间:2015-10-12 09:13:08

标签: python google-drive-api

在我看来应该很容易,但由于某种原因,我无法找到正确的方法:如何使用Python更新Google云端硬盘中的文件?

我的代码:

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
gauth = GoogleAuth()
gauth.LoadCredentialsFile("mycreds.txt")
drive = GoogleDrive(gauth)
file = drive.CreateFile({'title': 'Hello.txt'})
file.SetContentString('test 1')
file.Upload()

这会创建一个新文件。现在我想在下一行添加到此文件' test 2'。 每次在代码上运行都会创建新文件,这不是我想要的。

有人可以帮我这个吗?

爸爸

2 个答案:

答案 0 :(得分:0)

这是因为每次运行脚本并因此创建新文档时都会调用CreateFile。

如果您想在不关闭脚本的情况下更新文件:

file = drive.CreateFile({'title':'appdata.json', 'mimeType':'application/json'})
file.SetContentString('{"firstname": "John", "lastname": "Smith"}')
file.Upload() # Upload file
file.SetContentString('{"firstname": "Claudio", "lastname": "Afshar"}')
file.Upload() # Update content of the file

我还没有找到通过ID获取GoogleDriveFile实例的方法,但文档提到迭代所有符合描述的文件:

file_list = drive.ListFile({'q': "'root' in parents and trashed=false"}).GetList()
for file in file_list:
  print 'title: %s, id: %s' % (file['title'], file['id'])

因此,如果您通过搜索文件并检查列表是否只包含一个项目来使用它,那么您已经找到了您的特定文档。 对于'q'的搜索参数:https://developers.google.com/drive/web/search-parameters

file_list = drive.ListFile({'q': "title='hello.doc' and trashed=false"}).GetList()
if len(file_list) == 1:
    file = file_list.next()
updated_content = file.GetContentString() + "New content"
file.SetContentString(updated_content)
file.Upload()

抱歉,我不知道更多细节,如果这对您不起作用,请查看官方python Google API:https://developers.google.com/drive/web/quickstart/python

答案 1 :(得分:0)

首先,每次使用drive.CreateFile()file.Upload()时,它将创建一个新实例。要覆盖同一文件,您必须指定该文件的文件ID。 例如,您可以这样创建一个新文件:

yourfile_id = '*****'
file = drive.CreateFile({'title': 'Hello.txt', 'id': yourfile_id})

这样,您将确保不会重复该文件。

第二,要更新文件,您必须先读取文件,然后将要添加的内容添加到读取的数据中。 下面显示一个示例:

file_list = drive.ListFile({'q': "'root' in parents and trashed=false"}).GetList()

for file in file_list:
    if file['title'] == 'Hello.txt':
        new_file = drive.CreateFile({'title': file['title'], 'id': file['id']})
        file_content = new_file.GetContentString()
        file_content = file_content + '\ntest 2'
        new_file.SetContentString(file_content)
        new_file.Upload()

第一行获取根目录中所有文件的列表(您可以通过将“ root”替换为文件夹ID来搜索任何子文件夹) for循环找到您想要的文件('Hello.txt'),并将其标题和ID馈入new_file(用旧的替换,如之前提到的那段代码) 接下来的两行读取文件内容并添加新数据,最后两行上载并更新文件。