Загрузка и удаление PyDrive

Я новичок в API Google Диска и пишу простейшую форму сценария, который автоматически загружает изображение с локального диска на диск 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'

введите здесь описание изображения


person Gary    schedule 09.02.2020    source источник
comment
Он печатает «тест»?   -  person daynhdev    schedule 09.02.2020
comment
Да, это тест печати   -  person Gary    schedule 09.02.2020
comment
Можете ли вы распечатать свой рабочий каталог? Что это такое ? Это твой локальный диск? Я подозреваю, что это проблема.   -  person mozilla_firefox    schedule 09.02.2020
comment
Мог ли файл быть открыт дважды? В документах говорится, что SetContentFile открывает файл.   -  person Mic    schedule 10.02.2020
comment
Я работаю с проектом pycharm, и да, когда печать os.cwd() находится на локальном диске, PycharmProjects\example. Я не думаю, что файл открывается дважды, поскольку он говорит: открывает файл, указанный этим методом. Будет прочитан, загружен и закрыт методом Upload(). Автоматически устанавливает метаданные title и mimeType, если они не указаны. Я включил фотографию дерева проекта. Или есть другой способ выполнить то, что я хотел сделать?   -  person Gary    schedule 11.02.2020


Ответы (1)


Даже если PyDrive не закроет его для вас, изучив код, вы можете сделать что-то вроде этого:

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

не могли бы вы попробовать, пожалуйста, и посмотреть, поможет ли это?

person Shcheklein    schedule 12.02.2020