Как удалить навсегда из подключенной папки Drive?

Я написал скрипт для загрузки моих моделей и примеров обучения в Google Drive после каждой итерации в случае сбоев или всего, что мешает работе ноутбука, и выглядит примерно так:

drive_path = 'drive/My Drive/Colab Notebooks/models/'
if path.exists(drive_path):
    shutil.rmtree(drive_path)
shutil.copytree('models', drive_path)

Всякий раз, когда я проверяю свой Диск Google, несколько десятков ГБ занимают папки удаленных моделей в Корзине, которые я должен удалить их вручную.

Единственная функция в google.colab.drive кажется mount вот и все.

Согласно этому уроку, shutil.rmtree() навсегда удаляет каталог, но, видимо, он не работает для Drive.

0 ответов

Это действие можно выполнить внутри Google Colab с помощью модуля pydrive. Я предлагаю вам сначала переместить ненужные файлы и папки в корзину (обычно удаляя их в коде), а затем в любое время, когда вы сочтете это необходимым (например, вы хотите освободить место для сохранения веса нового проекта DL), очистите корзину, написав следующие строки.

Чтобы навсегда очистить корзину Google Диска, введите следующие строки в записную книжку Google Colab:

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials

auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
my_drive = GoogleDrive(gauth)

После ввода кода аутентификации и создания действительного экземпляра класса Google Drive напишите:

for a_file in my_drive.ListFile({'q': "trashed = true"}).GetList():
    # print the name of the file being deleted.
    print(f'the file "{a_file['title']}", is about to get deleted permanently.')
    # delete the file permanently.
    a_file.Delete()

Если вы не хотите использовать мое предложение и хотите окончательно удалить определенную папку на вашем Диске, возможно, вам придется выполнять более сложные запросы и решать fileId, parentId, а также тот факт, что файл или папка на вашем Диске может иметь несколько родительских папок при выполнении запросов к Google Drive API.

Чтобы получить больше информации:

  • Вы можете найти примеры более сложных (пока типичных) запросов, здесь.
  • Вы можете найти пример проверки, если файл находится в папке конкретного, здесь.
  • Утверждение о том, что файлы и папки на Google Диске могут иметь несколько родительских папок, может стать лучше и понятнее после прочтения этого сообщения.

Файлы будут перемещены в корзину после удаления, поэтому этот хитрый трюк уменьшает размер файла до 0 перед удалением (отменить нельзя!)


import os

delete_filepath = 'drive/My Drive/Colab Notebooks/somefolder/examplefile.png'

open(delete_filename, 'w').close() #overwrite and make the file blank instead - ref: https://stackru.com/a/4914288/3553367
os.remove(delete_filename) #delete the blank file from google drive will move the file to bin instead

Просто нужно переместить в корзину и подключиться к диску. Оттуда навсегда удалите записные книжки.

Другие вопросы по тегам