Python 通过google api更新google drive上的文件后,如果不关闭空闲窗口,本地计算机上的文件将不可编辑
我第一次使用GoogleDrive api时遇到更新问题,甚至我遵循了Quickstart的示例,在对其进行一些更改后,GoogleDrive上的文件成功更新。但现在更新后出现了一个新问题,我不确定这是因为我对Quickstart的更改不正确还是其他原因。问题是在用本地机器上的excel文件更新google drive上的excel文件后,如果我不关闭空闲终端,本地机器上的excel文件将不可编辑;但是如果我关闭空闲窗口,我可以用excel文件做任何事情并保存更改。例如,在不关闭空闲文件的情况下,我对excel文件进行了一些更改并尝试保存它,然后系统会说类似共享冲突的内容,并将该文件保存为临时文件62635600….,如果我尝试删除excel文件,则系统会说该文件正被pythonw.exe使用。关闭空闲窗口后,excel将恢复正常,与正常excel文件相同。有人知道吗?您可以在本地计算机上安装google drive,并将文件复制到google drive目录的正确位置。然后google drive(客户端软件)将更新文件。您可以在本地计算机上安装google drive,并将文件复制到google drive目录的正确位置。然后google drive(客户端软件)将更新该文件。我在这里找到了一个示例,并遵循了它。 我的问题是,由于本地文件的“title”、“descript”和“mimeType”与google drive上的文件完全相同(因为本地文件比google drive上的文件多了一行值,其他所有内容都相同),我需要为这3个元素赋值吗?如果没有,那么我不能用本地驱动器上的文件更新google drive上的文件,如果我只给“title”赋值,脚本会用本地机器上的文件更新google drive上的文件,但奇怪的是如果我不关闭空闲终端,我本地机器上的文件是不可编辑的,即使phthon脚本已经成功运行并完成,我得到的消息是“pythonw.exe正在使用该文件…”,我该如何处理Python 通过google api更新google drive上的文件后,如果不关闭空闲窗口,本地计算机上的文件将不可编辑,python,google-api-python-client,Python,Google Api Python Client,我第一次使用GoogleDrive api时遇到更新问题,甚至我遵循了Quickstart的示例,在对其进行一些更改后,GoogleDrive上的文件成功更新。但现在更新后出现了一个新问题,我不确定这是因为我对Quickstart的更改不正确还是其他原因。问题是在用本地机器上的excel文件更新google drive上的excel文件后,如果我不关闭空闲终端,本地机器上的excel文件将不可编辑;但是如果我关闭空闲窗口,我可以用excel文件做任何事情并保存更改。例如,在不关闭空闲文件的情况下
def update_file(service, file_id, new_title, new_description, new_mime_type,
new_filename, new_revision):
try:
file = service.files().get(fileId=file_id).execute()
# File's new metadata.
file['title'] = new_title
file['description'] = new_description
file['mimeType'] = new_mime_type
# File's new content.
media_body = MediaFileUpload(
new_filename, mimetype=new_mime_type, resumable=True)
# Send the request to the API.
updated_file = service.files().update(
fileId=file_id,
body=file,
newRevision=new_revision,
media_body=media_body).execute()
return updated_file
except errors.HttpError, error:
print 'An error occurred: %s' % error
return None
我在这里找到了一个例子,并遵循它。 我的问题是,由于本地文件的“title”、“descript”和“mimeType”与google drive上的文件完全相同(因为本地文件比google drive上的文件多了一行值,其他所有内容都相同),我需要为这3个元素赋值吗?如果没有,那么我不能用本地驱动器上的文件更新google drive上的文件,如果我只给“title”赋值,脚本会用本地机器上的文件更新google drive上的文件,但奇怪的是如果我不关闭空闲终端,我本地机器上的文件是不可编辑的,即使phthon脚本已经成功运行并完成,我得到的消息是“pythonw.exe正在使用该文件…”,我该如何处理
def update_file(service, file_id, new_title, new_description, new_mime_type,
new_filename, new_revision):
try:
file = service.files().get(fileId=file_id).execute()
# File's new metadata.
file['title'] = new_title
file['description'] = new_description
file['mimeType'] = new_mime_type
# File's new content.
media_body = MediaFileUpload(
new_filename, mimetype=new_mime_type, resumable=True)
# Send the request to the API.
updated_file = service.files().update(
fileId=file_id,
body=file,
newRevision=new_revision,
media_body=media_body).execute()
return updated_file
except errors.HttpError, error:
print 'An error occurred: %s' % error
return None
假设您使用的是API v3,我相信以下代码将实现您想要实现的目标:
def update_file(file_path, fileId):
media_body = MediaFileUpload(file_path, mimetype="application/vnd.ms-excel")
results = file_service.update(fileId=fileId, media_body=media_body).execute()
return results
我对它持肯定态度,因为我在创建时使用它定期将文件备份到我的Google Drive帐户。如果您感兴趣,它还包含一些与Google Drive API交互的更实用的示例。假设您使用的是API v3,我相信以下代码将实现您想要实现的目标:
def update_file(file_path, fileId):
media_body = MediaFileUpload(file_path, mimetype="application/vnd.ms-excel")
results = file_service.update(fileId=fileId, media_body=media_body).execute()
return results
我对它持肯定态度,因为我在创建时使用它定期将文件备份到我的Google Drive帐户。如果您感兴趣,它还包含一些与Google Drive API交互的更实用的示例。hehe,是的,我知道,但我需要的是自动完成而不是手动完成,这就是为什么我需要编写脚本来完成这项工作。无论如何,非常感谢你的回复。是的,用脚本复制。因此,编写一个脚本,将excel文件复制到google驱动器。google drive将检测到更改并进行同步。是的,但是如何编写脚本?我可以编写脚本将一个文件从本地驱动器插入google驱动器,但这是在google驱动器中创建一个新文件,因此如果我每天使用相同的脚本,该脚本将在google驱动器中创建多个新文件,而不是用新文件替换旧文件。我知道我应该使用诸如service.files().update().excecute()之类的东西来更新特定的文件,但是如何在本地驱动器上获取该文件,以及如何使用service.files().update().excecute()来用本地文件更新特定的文件?好的,现在我想我知道你的意思了。我实际上需要在服务器上运行这个脚本,服务器将进行计算并将一个行号插入excel文件,然后用新生成的excel文件更新google drive上的文件。服务器在amazon云上,我正在编写脚本并在我的机器上进行测试。没有适用于Linux的Google Drive客户端软件。呵呵,是的,我知道,但我需要的是自动完成而不是手动完成,这就是为什么我需要编写脚本来完成这项工作。无论如何,非常感谢你的回复。是的,用脚本复制。因此,编写一个脚本,将excel文件复制到google驱动器。google drive将检测到更改并进行同步。是的,但是如何编写脚本?我可以编写脚本将一个文件从本地驱动器插入google驱动器,但这是在google驱动器中创建一个新文件,因此如果我每天使用相同的脚本,该脚本将在google驱动器中创建多个新文件,而不是用新文件替换旧文件。我知道我应该使用诸如service.files().update().excecute()之类的东西来更新特定的文件,但是如何在本地驱动器上获取该文件,以及如何使用service.files().update().excecute()来用本地文件更新特定的文件?好的,现在我想我知道你的意思了。我实际上需要在服务器上运行这个脚本,t