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

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

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

JavaMentor
JavaMentor

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

  • как загружать данные в 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 uuid

bucket_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 и Яндекс.Дзен


Перевод статьи Siddhant Sadangi: How To Manage Files in Google Colab

Предыдущая статьяСоветы по созданию правильных модальных окон
Следующая статьяКак писать код на Python лучше: 6 рекомендаций