Python 通过google api更新google drive上的文件后,如果不关闭空闲窗口,本地计算机上的文件将不可编辑

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文件做任何事情并保存更改。例如,在不关闭空闲文件的情况下

我第一次使用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正在使用该文件…”,我该如何处理

 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