Управление файлами в Google Colab

Jenny V
NOP::Nuances of Programming
10 min readJul 12, 2021

Google Colaboratory — бесплатная среда Jupyter Notebook, которая выполняется на облачных серверах Google и позволяет использовать аппаратное оборудование бэкенда, например GPU and TPU. В результате вы можете работать со всеми возможностями Jupyter Notebook, не устанавливая его на локальной машине.

Colab поставляется (почти) со всеми настройками, позволяющими начать процесс программирования, за исключением датасетов. Как же с помощью Colab получить к ним доступ?

В данной статье мы рассмотрим:

  • как загружать данные в Colab из разных источников;
  • как произвести обратную запись из Colab в эти источники данных;
  • ограничения Google Colab при работе с внешними файлами.

Операции с директориями и файлами в Google Colab

Поскольку Colab позволяет делать все, что угодно, в локально размещенном Jupyter Notebook, то появляется возможность работать с командами оболочки, такими как ls, dir, pwd, cd, cat, echo и т.д., с помощью магической команды для строки (%) или bash-команды (!).

Для просмотра структуры директории воспользуйтесь панелью файлового менеджера слева.

Просмотр директорий в Colab

Как загружать и скачивать файлы в/из Google Colab

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

Однако Colab предоставляет разные варианты подключения к практически любому источнику данных. Посмотрим, как это происходит.

Обращение к GitHub из Google Colab

Вы можете либо клонировать весь репозиторий GitHub в среду Colab, либо получить доступ к отдельным файлам по их необработанной ссылке.

Клонирование репозитория GitHub

Клонирование репозитория Github в среду Colab происходит по такому же принципу, как и на локальный компьютер, а именно с помощью git clone. По завершении этой процедуры обновите менеджер файлов для просмотра содержимого.

И теперь файлы можно читать точно так же, как и на локальном компьютере.

Клонирование репозитория в Colab

Скачивание отдельных файлов непосредственно с GitHub

Если для работы нужно лишь несколько файлов, а не весь репозиторий, то можно обойтись без его клонирования в Colab и скачать эти файлы непосредственно с GitHub.

Для этого:

  1. Кликните на файл в репозитории.
  2. Кликните на View Raw.
  3. Скопируйте URL необработанного файла.
  4. Используйте этот URL как местоположение файла.
Чтение файлов, скаченных в Colab

Обращение к локальной файловой системе через Google Colab

Читать и записывать файлы из/в локальную файловую систему можно с помощью менеджера или кода Python.

Обращение к локальным файлам через менеджер файлов

Загрузка файлов из локальной файловой системы через менеджер

Для загрузки любых файлов из локальной файловой системы в текущую рабочую директорию Colab можно воспользоваться опцией Upload в верхней части панели менеджера файлов.

Для загрузки файлов напрямую в поддиректорию нужно:

  1. Кликнуть на три точки, появляющиеся при наведении курсора на каталог.
  2. Выбрать опцию Upload.
Загрузка файлов из локальной системы в Colab

3. Выбрать файлы для загрузки из диалогового окна File Upload.

4. Подождать завершения загрузки, процесс выполнения которой отображается в нижней части панели менеджера файлов.

Процесс выполнения загрузки в Colab

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

Чтение файлов, загруженных в Colab

Скачивание файлов в локальную файловую систему через менеджер файлов

Кликните на три точки, появляющиеся при наведении курсора на имя файла и выберите опцию Download.

Скачивание файлов из Colab в локальную систему

Обращение к локальной файловой системе посредством кода Python

Для осуществления этого шага предварительно требуется импортировать модуль files из google.colab library:

from google.colab import files

Загрузка файлов из локальной файловой системы посредством кода Python

Применяем метод загрузки объекта files:

uploaded = files.upload()

В результате открывается диалоговое окно File Upload:

Загрузка файлов в Colab программным способом

Выбираем файлы для загрузки и ждем завершения. Ход ее выполнения отображается:

Процесс программной загрузки файлов

Объект uploaded является словарем, где имена файлов и их содержимое хранятся в виде пар “ключ-значение”:

Структура загружаемого объекта

По окончании загрузки считать его можно точно так же, как и любой другой файл из Colab:

df4 = pd.read_json("News_Category_Dataset_v2.json", lines=True)

Также есть способ считать его напрямую из директории uploaded, используя библиотеку io:

import io
df5 = pd.read_json(io.BytesIO(uploaded['News_Category_Dataset_v2.json']), lines=True)

Убедитесь, что имя файла соответствует тому файлу, который вы хотите скачать.

Скачивание файлов из Colab в локальную систему посредством кода Python

Применение метода download объекта files позволяет скачать любой файл из Colab на локальный диск. Процесс выполнения отображается, и по его завершении можно выбрать на локальном компьютере место для сохранения файла.

Скачивание файлов из Colab программным способом

Обращение к Google Диску из Google Colab

Рассмотрим пошагово, как с помощью модуля drive из google.colab можно смонтировать весь Google Диск в Colab:

1. Выполняем следующий код с целью получения ссылки для аутентификации:

from google.colab import drive
drive.mount('/content/gdrive')

2. Открываем ссылку.

3. Выбираем аккаунт Google, диск которого нужно смонтировать.

4. Разрешаем Google Drive Stream доступ к вашему аккаунту Google.

5. Копируем отображенный код, вставляем его в текстовое окно, как показано ниже, и нажимаем Enter.

Монтирование Google Диска в Colab

По окончании монтирования получаем сообщение “Mounted at /content/gdrive” (”Смонтировано в/содержимое/gdrive”), после чего можно просматривать содержимое диска из панели менеджера файлов.

Изучение содержимого Google Диска в Colab

Теперь взаимодействовать с Google Диск можно точно так же, как и с каталогом в среде Colab. Любые изменения, связанные с этим каталогом, будут сразу же отображаться на Google Диске, файлы которого вы можете читать как и любые другие.

Кроме того, можно даже напрямую делать запись из Colab на Google Диск, применяя обычные операции с файлами/каталогами.

! touch "/content/gdrive/My Drive/sample_file.txt"

Эта команда создаст файл на Google Диске, который отобразится на панели менеджера файлов при ее обновлении:

Загрузка файла из Colab на Google Диск
Загрузка файла из Colab на Google Диск

Обращение к Google Таблицам из Google Colab

Для обращения к Google Таблицам:

  1. Прежде всего, необходимо аутентифицировать аккаунт для соединения с Colab. С этой целью выполняем следующий код:
from google.colab import auth
auth.authenticate_user()

2. В результате получаем ссылку для аутентификации и открываем ее.

3. Выбираем аккаунт Google для соединения.

4. Разрешаем Google Cloud SDK доступ к вашему аккаунту Google.

5. Наконец, копируем отображаемый код, вставляем его в текстовое окно и нажимаем Enter.

Аутентификация Google Cloud SDK

Для взаимодействия с Google Таблицами потребуется импортировать предустановленную библиотеку gspread. Чтобы разрешить ей доступ к вашему аккаунту Google воспользуемся методом GoogleCredentials из предустановленной библиотеки oauth2client.client:

import gspread
from oauth2client.client import GoogleCredentials

gc = gspread.authorize(GoogleCredentials.get_application_default())

После выполнения кода в текущей рабочей директории будет создан файл adc.json с учетными данными, которые нужны gspread для получения доступа к вашему аккаунту Google.

Файл adc.json для Google Таблиц

Теперь создавайте или скачивайте Google таблицы напрямую из среды Colab.

Создание/обновление Google таблицы в Colab

  1. Создаем рабочую книгу с помощью метода create объекта gc:
wb = gc.create('demo')

2. Как только она готова, можно ее посмотреть на sheets.google.com.

Загрузка таблиц из Colab в Google Tаблицы

3. Прежде всего, открываем рабочую книгу для записи в нее значений:

ws = gc.open('demo').sheet1

4. Затем выбираем ячейки для заполнения:

Обновление таблиц в Google Tаблицах в Colab (1)

5. Таким образом мы создаем список ячеек с индексами (R1C1) и значениями (на данный момент пустыми). Можно изменить отдельные ячейки, обновив их атрибут значения:

Обновление таблиц в Google Таблицах в Colab (2)

6. Для обновления этих ячеек в рабочей таблице применяем метод update_cells:

Обновление таблиц в Google Таблицах в Colab (3)

7. Все изменения отображаются в вашей Google таблице.

Просмотр изменений

Скачивание данных из Google таблицы

1. Открываем рабочую книгу с помощью методаopen объекта gc:

wb = gc.open('demo')

2. Затем считываем все строки отдельной рабочей таблицы, задействуя метод get_all_values:

Скачивание таблиц из Google Таблиц в Colab

3. Для загрузки этих данных в датафрейм задействуем метод from_record объекта DataFrame:

Создание датафрейма из скаченных Google Таблиц

Обращение к Google Cloud Storage (GCS) из Google Colab

Для работы с GCS необходим проект Google Cloud (GCP). Вы можете создавать и подключаться к корзинам GCS в Colab через предустановленную утилиту командной строки gsutil.

1. Сначала указываем ID проекта:

project_id = '<project_ID>'

2. Для доступа к GCS проводим аутентификацию вашего аккаунта Google:

from google.colab import auth
auth.authenticate_user()

3. Выполнив вышеуказанный код, получаем ссылку для аутентификации и открываем ее.

4. Выбираем аккаунт Google для соединения.

5. Разрешаем доступ Google Cloud SDK к вашему аккаунту Google.

6. Теперь копируем отображаемый код, вставляем его в текстовое окно и нажимаем Enter.

Аутентификация Google Could SDK

7. Затем настраиваем gsutil для работы с проектом:

! gcloud config set project {project_id}

8. Вы можете создать корзину с помощью соответствующей команды mb (“make bucket”). У корзин GCP должны быть универсальные уникальные имена, поэтому воспользуемся предустановленной библиотекой uuid для создания такого рода ID:

import uuidbucket_name = f'sample-bucket-{uuid.uuid1()}'
! gsutil mb gs://{bucket_name}

9. Как только корзина готова, загружаем в нее файл из среды Colab:

! gsutil cp /tmp/to_upload.txt gs://{bucket_name}/

10. По окончании загрузки файл становится видимым в браузере GCS для вашего проекта: https://console.cloud.google.com/storage/browser?project=<project_id>

! gsutil cp gs://{bucket_name}/{filename} {download_location}

По завершении скачивания файл отображается на панели менеджера файлов в Colab в указанном месте.

Обращение к AWS S3 из Google Colab

Для доступа к S3 из Colab потребуется создать аккаунт AWS, настроить IAM, а также сгенерировать ключ доступа и секретный ключ доступа. Необходимо также установить библиотеку awscli в среду Colab:

1. Устанавливаем библиотеку awscli:

! pip install awscli

2. После установки запускаем настройку AWS командой aws configure:

Конфигурация AWS

3. Вводим access_key и secret_access_key в текстовое окно и нажимаем Enter:

Теперь можно скачивать любые файлы из S3:

! aws s3 cp s3://{bucket_name} ./{download_location} --recursive 
--exclude "*" --include {filepath_on_s3}

filepath_on_s3 позволяет указать один файл или подобрать несколько файлов по шаблону.

Вам придет уведомление о завершении скачивания, после чего файлы будут доступны в заданном месте для дальнейшего использования.

Для загрузки файла просто поменяйте местами аргументы источника и назначения:

! aws s3 cp ./{upload_from} s3://{bucket_name} --recursive --exclude "*" --include {file_to_upload}

file_to_upload позволяет указать один файл или подобрать несколько файлов по шаблону.

Вы получите уведомление об окончании загрузки, и загруженные файлы будут доступны в корзине S3 в заданном каталоге: https://s3.console.aws.amazon.com/s3/buckets/{bucket_name}/{folder}/?region={region}

Обращение к датасетам Kaggle из Google Colab

Для скачивания датасетов из Kaggle требуется наличие аккаунта и API-токена.

  1. Для создания API-токена заходим в My Account, после чего — Create New API Token.
  2. Открываем файл kaggle.json и копируем его содержимое в виде {"username":"########", "key":"################################"}.
  3. Выполняем следующие команды в Colab:
! mkdir ~/.kaggle #создаем каталог .kaggle в корневой директории
! echo '<PASTE_CONTENTS_OF_KAGGLE_API_JSON>' > ~/.kaggle/kaggle.json #записываем учетные данные kaggle API в kaggle.json
! chmod 600 ~/.kaggle/kaggle.json # устанавливаем разрешения
! pip install kaggle #устанавливаем библиотеку kaggle

4. После создания файла kaggle.json в Colab и установки библиотеки Kaggle приступаем к поиску датасета с помощью следующей команды:

! kaggle datasets list -s {KEYWORD}

5. Скачиваем нужный датасет с помощью команды:

! kaggle datasets download -d {DATASET NAME} -p /content/kaggle/

Датасет будет загружен и доступен по указанному пути (в данном случае /content/kaggle/).

Обращение к базам данных MySQL из Google Colab

1. Для работы с реляционными базами данных необходимо импортировать предустановленную библиотеку sqlalchemy.

import sqlalchemy

2. Вводим данные для подключения и создаем движок:

HOSTNAME = 'ENTER_HOSTNAME'
USER = 'ENTER_USERNAME'
PASSWORD = 'ENTER_PASSWORD'
DATABASE = 'ENTER_DATABASE_NAME'

connection_string = f'mysql+pymysql://{MYSQL_USER}:{MYSQL_PASSWORD}@{MYSQL_HOSTNAME}/{MYSQL_DATABASE}'

engine = sqlalchemy.create_engine(connection_string)

3. Создаем SQL-запрос и загружаем его результаты в датафрейм с помощью pd.read_sql_query():

query = f"SELECT * FROM {DATABASE}.{TABLE}"

import pandas as pd
df = pd.read_sql_query(query, engine)

Ограничения Google Colab при работе с файлами

При работе с Colab важно помнить о том, что доступ к загружаемым файл ограничен по времени. Colab — это временная среда, в которой тайм-аут простоя составляет 90 минут, а абсолютный тайм-аут — 12 часов. Это значит, что отключение среды выполнения происходит в случае 90 минутного простоя или 12-ти часового использования. Такое отключение приводит к потери всех переменных, состояний, установленных пакетов и файлов, вследствие чего при повторном подключении вас ждет встреча с абсолютно новой и чистой средой.

Кроме того, дисковое пространство Colab ограничено 108 Гб, только 77 Гб из которых доступны пользователю. Этого объема достаточно для решения большинства задач, но вот при работе с крупными датасетами, например изображениями или видео, данное обстоятельство нельзя упускать из внимания.

Заключение

Google Colab — превосходный инструмент для тех, кто стремится обуздать мощь высокопроизводительных вычислительных ресурсов, таких как GPU, без оглядки на их стоимость.

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

В зависимости от сценария использования или архитектуры данных вы можете запросто применять вышеописанные методы для подключения источника данных напрямую к Colab и приступать к программированию.

Полезные информационные ресурсы

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен

--

--