Проблема проста: у меня есть данные о gDrive, например на
/projects/my_project/my_data*
.
Также у меня есть простой блокнот в gColab.
Итак, я хотел бы сделать что-то вроде:
for file in glob.glob("/projects/my_project/my_data*"):
do_something(file)
К сожалению, во всех примерах (например, https://colab.research.google.com/notebook#fileId=/v2/external/notebooks/io.ipynb ) предлагается в основном загружать в блокнот только все необходимые данные.
Но если у меня много данных, это может быть довольно сложно. Есть ли возможности решить этот вопрос?
Спасибо за помощь!
python
google-colaboratory
Скитатор
источник
источник
Ответы:
Хорошие новости, PyDrive имеет первоклассную поддержку CoLab! PyDrive - это оболочка для клиента Python на Google Диске. Вот пример того, как вы загрузите ВСЕ файлы из папки, аналогично использованию
glob
+*
:!pip install -U -q PyDrive import os from pydrive.auth import GoogleAuth from pydrive.drive import GoogleDrive from google.colab import auth from oauth2client.client import GoogleCredentials # 1. Authenticate and create the PyDrive client. auth.authenticate_user() gauth = GoogleAuth() gauth.credentials = GoogleCredentials.get_application_default() drive = GoogleDrive(gauth) # choose a local (colab) directory to store the data. local_download_path = os.path.expanduser('~/data') try: os.makedirs(local_download_path) except: pass # 2. Auto-iterate using the query syntax # https://developers.google.com/drive/v2/web/search-parameters file_list = drive.ListFile( {'q': "'1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk' in parents"}).GetList() for f in file_list: # 3. Create & download by id. print('title: %s, id: %s' % (f['title'], f['id'])) fname = os.path.join(local_download_path, f['title']) print('downloading to {}'.format(fname)) f_ = drive.CreateFile({'id': f['id']}) f_.GetContentFile(fname) with open(fname, 'r') as f: print(f.read())
Обратите внимание, что аргументы для
drive.ListFile
- это словарь, который совпадает с параметрами, используемыми Google Drive HTTP API (вы можете настроитьq
параметр, чтобы он соответствовал вашему варианту использования).Знайте, что во всех случаях файлы / папки кодируются по идентификаторам ( посмотрите 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk ) на Google Диске. Это требует, чтобы вы выполняли поиск на Google Диске по конкретному идентификатору, соответствующему папке, в которой вы хотите выполнить поиск.
Например, перейдите в папку,
"/projects/my_project/my_data"
которая находится на вашем Google Диске.Видим, что он содержит файлы, которые мы хотим загрузить в CoLab. Чтобы получить идентификатор папки для использования PyDrive, посмотрите на URL-адрес и извлеките параметр id. В этом случае URL-адрес, соответствующий папке, был:
Где id - это последняя часть URL -адреса : 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk .
источник
Изменить : по состоянию на февраль 2020 года появился первоклассный пользовательский интерфейс для автоматического подключения Drive.
Сначала откройте браузер файлов с левой стороны. Появится кнопка «Смонтировать диск». После нажатия вы увидите запрос о разрешениях для подключения Диска, а после этого ваши файлы Диска будут присутствовать без настройки, когда вы вернетесь в ноутбук. Завершенный поток выглядит так:
Исходный ответ следует ниже. (Это также будет работать для общих записных книжек.)
Вы можете смонтировать файлы на Google Диске, запустив следующий фрагмент кода:
from google.colab import drive drive.mount('/content/drive')
Затем вы можете взаимодействовать с файлами на Диске на боковой панели браузера файлов или с помощью утилит командной строки.
Вот пример блокнота
источник
Спасибо за отличные ответы! Самый быстрый способ получить несколько разовых файлов в Colab с диска Google: загрузить помощник по Диску и смонтировать
from google.colab import drive
Появится запрос на авторизацию.
drive.mount('/content/drive')
Откройте ссылку в новой вкладке-> вы получите код - скопируйте его обратно в подсказку, теперь у вас есть доступ к проверке диска Google:
!ls "/content/drive/My Drive"
затем скопируйте файл (ы) по мере необходимости:
!cp "/content/drive/My Drive/xy.py" "xy.py"
подтверждаем, что файлы были скопированы:
источник
Большинство предыдущих ответов немного (очень) сложны,
from google.colab import drive drive.mount("/content/drive", force_remount=True)
Я понял, что это самый простой и быстрый способ установить диск Google в CO Lab. Вы можете изменить его
mount directory location
на все, что захотите, просто изменив параметр дляdrive.mount
. Он даст вам ссылку для принятия разрешений с вашей учетной записью, а затем вам нужно скопировать и вставить сгенерированный ключ, а затем диск будет установлен по выбранному пути.force_remount
используется только тогда, когда вам нужно смонтировать диск, независимо от того, был ли он загружен ранее. Вы можете пренебречь этим параметром when, если не хотите принудительно монтироватьИзменить: проверьте это, чтобы узнать больше о способах выполнения
IO
операций в colab https://colab.research.google.com/notebooks/io.ipynbисточник
Вы не можете постоянно хранить файл на colab. Хотя вы можете импортировать файлы со своего диска, и каждый раз, когда вы закончите с файлом, вы можете сохранить его обратно.
Чтобы подключить диск Google к сеансу Colab
from google.colab import drive drive.mount('/content/gdrive')
вы можете просто записать на диск Google, как если бы в локальную файловую систему. Теперь, если вы видите, что ваш диск Google будет загружен на вкладке «Файлы». Теперь вы можете получить доступ к любому файлу из своего колаба, вы можете как писать, так и читать из него. Изменения будут внесены на вашем диске в режиме реального времени, и любой, у кого есть ссылка для доступа к вашему файлу, сможет просмотреть внесенные вами изменения из вашего colab.
пример
with open('/content/gdrive/My Drive/filename.txt', 'w') as f: f.write('values')
источник
Сначала я сделал следующее:
from google.colab import drive drive.mount('/content/drive/')
затем
После того, как я могу, например, читать файлы csv с помощью
df = pd.read_csv("data_example.csv")
Если у вас разные места для файлов, просто добавьте правильный путь после My Drive
источник
Я ленив и у меня плохая память, поэтому я решил создать easycolab, который легче запоминать и набирать:
import easycolab as ec ec.mount()
Обязательно сначала установите его:
!pip install easycolab
mount()
Метод в основном это реализовать:from google.colab import drive drive.mount(‘/content/drive’) cd ‘/content/gdrive/My Drive/’
источник
Вы можете просто использовать фрагменты кода в левой части экрана. введите описание изображения здесь
Вставьте «Монтирование Google Диска в ВМ»
запустите код и скопируйте и вставьте код в URL-адрес
а затем используйте! ls для проверки каталогов
в большинстве случаев вы найдете то, что хотите, в каталоге "/ gdrive / Мой диск"
тогда вы можете выполнить это так:
from google.colab import drive drive.mount('/gdrive') import glob file_path = glob.glob("/gdrive/My Drive/***.txt") for file in file_path: do_something(file)
источник
Я написал класс, который загружает все данные в каталог. расположение на сервере colab
Все это можно вытащить отсюда https://github.com/brianmanderson/Copy-Shared-Google-to-Colab
!pip install PyDrive from pydrive.auth import GoogleAuth from pydrive.drive import GoogleDrive from google.colab import auth from oauth2client.client import GoogleCredentials import os class download_data_from_folder(object): def __init__(self,path): path_id = path[path.find('id=')+3:] self.file_list = self.get_files_in_location(path_id) self.unwrap_data(self.file_list) def get_files_in_location(self,folder_id): file_list = drive.ListFile({'q': "'{}' in parents and trashed=false".format(folder_id)}).GetList() return file_list def unwrap_data(self,file_list,directory='.'): for i, file in enumerate(file_list): print(str((i + 1) / len(file_list) * 100) + '% done copying') if file['mimeType'].find('folder') != -1: if not os.path.exists(os.path.join(directory, file['title'])): os.makedirs(os.path.join(directory, file['title'])) print('Copying folder ' + os.path.join(directory, file['title'])) self.unwrap_data(self.get_files_in_location(file['id']), os.path.join(directory, file['title'])) else: if not os.path.exists(os.path.join(directory, file['title'])): downloaded = drive.CreateFile({'id': file['id']}) downloaded.GetContentFile(os.path.join(directory, file['title'])) return None data_path = 'shared_path_location' download_data_from_folder(data_path)
источник
Чтобы извлечь zip-файл Google Диска из записной книжки Google Colab, например:
import zipfile from google.colab import drive drive.mount('/content/drive/') zip_ref = zipfile.ZipFile("/content/drive/My Drive/ML/DataSet.zip", 'r') zip_ref.extractall("/tmp") zip_ref.close()
источник
Чтобы прочитать все файлы в папке:
import glob from google.colab import drive drive.mount('/gdrive', force_remount=True) #!ls "/gdrive/My Drive/folder" files = glob.glob(f"/gdrive/My Drive/folder/*.txt") for file in files: do_something(file)
источник
@wenkesj
Я говорю о копировании каталога и всех его подкаталогов.
Для себя я нашел решение, которое выглядит так:
def copy_directory(source_id, local_target): try: os.makedirs(local_target) except: pass file_list = drive.ListFile( {'q': "'{source_id}' in parents".format(source_id=source_id)}).GetList() for f in file_list: key in ['title', 'id', 'mimeType']])) if f["title"].startswith("."): continue fname = os.path.join(local_target, f['title']) if f['mimeType'] == 'application/vnd.google-apps.folder': copy_directory(f['id'], fname) else: f_ = drive.CreateFile({'id': f['id']}) f_.GetContentFile(fname)
Тем не менее, похоже, что gDrive не любит копировать слишком много файлов.
источник
Есть много способов прочитать файлы в записной книжке colab (**. Ipnb), некоторые из них:
У меня сработали методы 1 и 2 , остальное я не мог понять. Если кто-то может, как другие пытались в сообщении выше, напишите элегантный ответ. заранее спасибо.!
Первый способ:
Мне не удалось смонтировать диск Google, поэтому я установил эти библиотеки
# Install a Drive FUSE wrapper. # https://github.com/astrada/google-drive-ocamlfuse !apt-get install -y -qq software-properties-common python-software-properties module-init-tools !add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null !apt-get update -qq 2>&1 > /dev/null !apt-get -y install -qq google-drive-ocamlfuse fuse from google.colab import auth auth.authenticate_user() from oauth2client.client import GoogleCredentials creds = GoogleCredentials.get_application_default() import getpass !google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL vcode = getpass.getpass() !echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
После завершения процесса установки и авторизации вы сначала монтируете свой диск.
После установки мне удалось смонтировать диск Google, все на вашем диске Google начинается с / content / drive
Теперь вы можете просто прочитать файл из
path_to_your_folder
папки в pandas, используя указанный выше путь.import pandas as pd df = pd.read_json('drive/ML/../../../../path_to_your_folder/file.json') df.head(5)
Второй способ :
Что удобно, если ваш файл, который вы хотите прочитать, находится в текущем рабочем каталоге.
Если вам нужно загрузить какие-либо файлы из вашей локальной файловой системы, вы можете использовать приведенный ниже код, иначе просто избегайте этого.!
from google.colab import files uploaded = files.upload() for fn in uploaded.keys(): print('User uploaded file "{name}" with length {length} bytes'.format( name=fn, length=len(uploaded[fn])))
предположим, что у вас есть ниже иерархия папок на вашем диске Google:
Затем вам просто нужен приведенный ниже код для загрузки в pandas.
import pandas as pd import io df = pd.read_json(io.StringIO(uploaded['file.json'].decode('utf-8'))) df
источник
from google.colab import drive drive.mount('/content/drive')
Это сработало идеально для меня, позже я смог использовать
os
библиотеку для доступа к своим файлам точно так же, как я получаю к ним доступ на своем ПК.источник
Считайте, что просто загрузите файл с постоянной ссылкой и
gdown
предустановлен, как здесьисточник