在我看来应该很容易,但由于某种原因,我无法找到正确的方法:如何使用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'。 每次在代码上运行都会创建新文件,这不是我想要的。
有人可以帮我这个吗?
爸爸
答案 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(用旧的替换,如之前提到的那段代码) 接下来的两行读取文件内容并添加新数据,最后两行上载并更新文件。