Удалите файлы из Колаборатории, не перемещаясь в корзину - PullRequest
0 голосов
/ 28 марта 2019

Я хотел бы немедленно удалить временные файлы, сохраненные из записной книжки Google Colab Laboratory, и не отправлять их в корзину.

Я использую Keras + Tensorflow в своем сценарии и сохраняю полную модель после каждой эпохиповышение квалификации.Основная причина в том, что если сценарий остановлен по какой-либо причине, я могу перезапустить его позже, и он прочитает последнюю сохраненную модель и продолжит обучение.Чтобы сэкономить место на диске (он использует мой Google-диск), мне нужно удалить предыдущую версию модели каждый раз, когда она сохраняет новую.Я сделал это с помощью стандартного python os.remove (), чтобы потом выяснить, что я полностью заполнил свой Google Диск из-за того, что os.remove просто переместил файлы в корзину и фактически не удалил их.

Iосмотрелся и нашел ссылки на API Google Colab, в котором говорилось, что нужно вызвать метод Delete объекта file.Однако получение ссылки на объект файла с помощью только имени файла выглядит до смешного сложным.Я предполагаю, что я не делаю это правильно.Код ниже - это обходной путь, который я придумал.Есть комментарий, который помечает, где мне пришлось заменить мой однострочный код на 25 строк с гораздо менее читаемым кодом.

Я должен также сказать, что документация, которую я нашел, сохранила указание, что я должен быть в состоянии найти файлв основном один вызов gdrive.ListFile с использованием чего-то вроде «name = 'myfile'», но всякий раз, когда я пытался это делать, я получал ошибки http-запроса.

!pip install -U -q PyDrive
import os
from google.colab import drive
drive.mount('/content/gdrive')
workdir = '/content/gdrive/My Drive/work/2019.03.26.trackingML/eff100_inverted'
os.chdir( workdir )

epoch = 170
fname = 'model_checkpoints/model_epoch%03d.h5' % (epoch)

#--------------------------------------------------------
# Everything below here is to replace the one line:
# os.remove(fname)

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()
gdrive = GoogleDrive(gauth)

# File google colab file object based on path
fullpath = os.path.join(workdir, fname)
mydirs = fullpath.split('/')[3:]
curid = 'root'
for d in mydirs:
    file_list = gdrive.ListFile({'q': "'%s' in parents and trashed=false" % curid}).GetList()
    for file in file_list:
        if file['title'] == d:
          curid = file['id']
          break

if fname.endswith(file['title']):
  print('Found file %s with id %s' % (file['title'], file['id']))
  file.Delete()
else:
  print('Unable to find %s' % fname)

Приведенный выше код в значительной степени выполняет то, что я хочу,но кажется уродливым и раздутым.Я надеюсь, что кто-то может указать мне на замену 1 или 2 строки для os.remove (), которая избегает заполнения моей корзины (и квоты).

...