¿Cómo leer datos en Google Colab desde mi unidad de Google?

8 minutos de lectura

Avatar de usuario de Scitator
escitador

Tengo algunos datos en gDrive, por ejemplo en
/projects/my_project/my_data*.

También tengo un cuaderno simple en gColab.

Entonces, me gustaría hacer algo como:

for file in glob.glob("/projects/my_project/my_data*"):
    do_something(file)

Desafortunadamente, todos los ejemplos (como este – https://colab.research.google.com/notebook#fileId=/v2/external/notebooks/io.ipynbpor ejemplo) sugiere cargar principalmente todos los datos necesarios en el cuaderno.

Pero, si tengo muchos datos, puede ser bastante complicado. ¿Cómo resolver este problema?

  • ¡Sorprendente! nadie dio un enlace a este cuaderno de colab que describe todos los métodos disponibles a partir de abril de 2019 – colab.research.google.com/notebooks/io.ipynb

    – humano

    25 de abril de 2019 a las 2:05

Avatar de usuario de Bob Smith
bob smith

Editar: a partir de febrero de 2020, ahora hay una interfaz de usuario de primera clase para montar automáticamente Drive.

Primero, abra el explorador de archivos en el lado izquierdo. Mostrará un botón ‘Montar unidad’. Una vez que haya hecho clic, verá un aviso de permisos para montar Drive, y luego sus archivos de Drive estarán presentes sin configuración cuando regrese a la computadora portátil. El flujo completo se ve así:

Ejemplo de montaje automático de la unidad

La respuesta original sigue, a continuación. (Esto también funcionará para las libretas compartidas).

Puede montar sus archivos de Google Drive ejecutando el siguiente fragmento de código:

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

Luego, puede interactuar con sus archivos de Drive en el panel lateral del explorador de archivos o mediante las utilidades de línea de comandos.

Aquí hay un cuaderno de ejemplo.

  • es la solución más sencilla para montar su gdrive en google colab, creo que debería ser la respuesta aceptada

    – buncis

    18 de septiembre de 2018 a las 8:47

  • Respuesta canónica, agradable. El bloc de notas de ejemplo es de solo lectura y no se puede usar directamente. Hacer Archivo->Guardar guardará un archivo en la unidad.

    – B Salita

    2 de noviembre de 2018 a las 20:28

  • ¿Cómo se sube otro nivel? por ej. drive.mount(‘/contenido/unidad/nombre con espacio’)

    – Iqlaas Ismail

    24 de abril de 2019 a las 16:05

  • ¿Tiene que autenticarse cada vez que conecta su unidad de Google?

    – Frank Meulenaar

    28 de abril de 2019 a las 9:24

  • Nota: Al usar el botón ‘Montar unidad’ en el explorador de archivos, no se necesitan códigos de autenticación para las computadoras portátiles que solo ha editado el usuario actual.

    – Yu Da Chi

    19 de junio de 2020 a las 11:08

avatar de usuario de wenkesj
wenkesj

Buenas noticias, PyDrive tiene soporte de primera clase en CoLab! PyDrive es un contenedor para el cliente Python de Google Drive. Aquí hay un ejemplo de cómo descargaría TODO archivos de una carpeta, similar a usar 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())

Observe que los argumentos para drive.ListFile es un diccionario que coincide con los parámetros utilizados por API HTTP de Google Drive (puedes personalizar el q parámetro para ajustarse a su caso de uso).

Sepa que en todos los casos, los archivos/carpetas están codificados por ID (mire el 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk) en Google Drive. Esto requiere que busque en Google Drive la identificación específica correspondiente a la carpeta en la que desea rootear su búsqueda.

Por ejemplo, navegue a la carpeta "/projects/my_project/my_data" que se encuentra en su Google Drive.

Google Drive

Vea que contiene algunos archivos, en los que queremos descargar a CoLab. Para obtener la identificación de la carpeta para usarla con PyDrive, mire la URL y extraiga el parámetro de identificación. En este caso, la url correspondiente a la carpeta era:

https://drive.google.com/drive/folders/1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk

Donde el id es la última parte de la url: 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk.

  • ¡Gracias! ¡Realmente funciona! ¿Y conoce alguna solución para copiar todo el directorio gDrive?

    – Scitador

    22 de enero de 2018 a las 16:49


  • @Scitator, ¿te refieres a todos los archivos dentro de Google Drive?

    – wenkesj

    23 de enero de 2018 a las 16:20

  • @Scitator, por favor, eche un vistazo a pythonhosted.org/PyDrive/… para tu pregunta

    – wenkesj

    25 de enero de 2018 a las 15:01

  • Gracias por la respuesta. Funciona, pero de alguna manera no entiendo algo. La forma en que funciona ahora (según tengo entendido) es que almacena los datos en la ruta dada en “local_download_path” en Google Drive. Pero los datos ya están en Google Drive (codificados por una identificación de carpeta específica). ¿Por qué necesitamos hacer esto? ¡Quiero decir que el archivo o los archivos ya están en Google Drive! Probé este método para leer una carpeta que contiene muchas imágenes, ¡y mi computadora se congeló! Cuando ejecuté este código, ¿intentó copiar NUEVAMENTE todas las imágenes (que ya están en Google Drive) en “local_download_path”?

    – Pingüinos Gemelos

    29 mayo 2018 a las 19:24

  • Bueno, terminé usando la segunda respuesta (ver más abajo). Es súper simple y fácil. Dígame si todavía tiene problemas para usar las respuestas a continuación.

    – Pingüinos Gemelos

    10 de diciembre de 2018 a las 9:14

avatar de usuario de eemilk
leche

Lo que he hecho es primero:

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

Entonces

%cd /content/drive/My Drive/Colab Notebooks/

Después de que pueda, por ejemplo, leer archivos csv con

df = pd.read_csv("data_example.csv")

Si tiene diferentes ubicaciones para los archivos, simplemente agregue la ruta correcta después de Mi unidad

  • Esta debe ser la mejor respuesta.

    – Katsu

    13 de junio a las 17:28

Avatar de usuario de H-San
H-San

¡Gracias por las buenas respuestas! La forma más rápida de obtener algunos archivos únicos en Colab desde Google Drive: Cargue el asistente de Drive y monte

from google.colab import drive

Esto solicitará la autorización.

drive.mount('/content/drive')

Abra el enlace en una nueva pestaña -> obtendrá un código; cópielo nuevamente en el mensaje que ahora tiene acceso a Google Drive Check:

!ls "/content/drive/My Drive"

luego copie los archivos según sea necesario:

!cp "/content/drive/My Drive/xy.py" "xy.py"

confirme que los archivos fueron copiados:

!ls

Avatar de usuario de Sundeep Pidugu
Pidugu de las profundidades del sol

La mayoría de las respuestas anteriores son un poco (Muy) complicadas,

from google.colab import drive
drive.mount("/content/drive", force_remount=True)

Descubrí que esta es la forma más fácil y rápida de montar Google Drive en Laboratorio de COPuede cambiar el mount directory location a lo que quieras simplemente cambiando el parámetro para drive.mount. Le dará un enlace para aceptar los permisos con su cuenta y luego tendrá que copiar y pegar la clave generada y luego la unidad se montará en la ruta seleccionada.

force_remount se usa solo cuando tiene que montar la unidad independientemente de si se cargó previamente. Puede ignorar este parámetro cuando no desea forzar el montaje

Editar: mira esto para encontrar más formas de hacer el IO operaciones en colab https://colab.research.google.com/notebooks/io.ipynb

Avatar de usuario de Himanshuman
himanshuman

No puede almacenar permanentemente un archivo en colab. Aunque puede importar archivos desde su unidad y cada vez que haya terminado con el archivo, puede volver a guardarlo.

Para montar la unidad de Google en su sesión de Colab

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

simplemente puede escribir en Google Drive como lo haría en un sistema de archivos local. Ahora, si ve que Google Drive se cargará en la pestaña Archivos. Ahora puede acceder a cualquier archivo desde su colab, puede escribir y leer en él. Los cambios se realizarán en tiempo real en su disco y cualquier persona que tenga el enlace de acceso a su archivo puede ver los cambios realizados por usted desde su colaboración.

Ejemplo

with open('/content/gdrive/My Drive/filename.txt', 'w') as f:
   f.write('values')

Soy perezoso y mi memoria es mala, así que decidí crear easycolab que es más fácil de memorizar y escribir:

import easycolab as ec
ec.mount()

Asegúrate de instalarlo primero: !pip install easycolab

El mount() El método básicamente implementa esto:

from google.colab import drive
drive.mount(‘/content/drive’)
cd ‘/content/gdrive/My Drive/’

¿Ha sido útil esta solución?