【问题标题】:PyDrive Upload and RemovePyDrive 上传和删除
【发布时间】:2020-02-09 01:40:56
【问题描述】:

我是 Google Drive API 的新手,正在编写一个最简单的脚本形式,该脚本会自动将图像从本地驱动器上传到 google 驱动器,然后在上传该图像后,删除本地副本,以下是我得到的:

#%%
import os
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from googleapiclient.http import MediaFileUpload
g_login = GoogleAuth()
g_login.LocalWebserverAuth()
drive = GoogleDrive(g_login)

#%%
header = 'images/dice'
path = header + str(i) + '.png'
file = drive.CreateFile()
file.SetContentFile(path)
file.Upload()
if file.uploaded:
    print("test")
    os.remove(path)

但是在尝试删除本地副本时,出现以下错误:

PermissionError: [WinError 32] 该进程无法访问该文件,因为它正被另一个进程使用:'images/dice1.png'

我搜索了它,认为它可能是 SetContentFile(path),它在 Upload() 之后没有关闭文件,根据

https://gsuitedevs.github.io/PyDrive/docs/build/html/pydrive.html

它应该在上传后自动关闭。

我在这里监督什么?

注意:最后,我想使用一个循环遍历目录中的所有文件。

这是输出:

1
test
---------------------------------------------------------------------------

PermissionError                           Traceback (most recent call last)

<ipython-input-21-2aeb578b5851> in <module>
      9 if file.uploaded:
     10     print("test")
---> 11     os.remove(path)
     12 

PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'images/dice1.png'

【问题讨论】:

  • 打印'test'吗?
  • 是的,它确实进行了打印测试
  • 你能打印你的工作目录吗?那是什么 ?那是你的本地驱动器吗?我怀疑这就是问题所在。
  • 文件会被打开两次吗?文档说 SetContentFile 打开文件。
  • 我正在使用 pycharm 项目,是的,当打印 os.cwd() 位于本地驱动器 PycharmProjects\example 下时。我认为文件不会打开两次,因为它说:“打开此方法指定的文件。将通过 Upload() 方法读取、上传和关闭。如果没有,则自动设置元数据'title'和'mimeType'指定的。”。我已经包含了项目树的照片。还是有另一种方式来执行我想做的事情?

标签: python google-drive-api pydrive


【解决方案1】:

即使 PyDrive 没有为您关闭它,从查看代码来看,您也可以执行以下操作:

...
try:
    file.Upload()
finally:
    file.content.close()
if file.uploaded:
...

你可以试试看有没有帮助?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2014-02-24
    • 1970-01-01
    相关资源
    最近更新 更多