google from files colab python google-colaboratory

python - from - google colab import drive



Google Colab: ¿cómo leer los datos de mi unidad de Google? (7)

¡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 TODOS los 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 la API HTTP de Google Drive (puede personalizar el parámetro q para adaptarlo a su caso de uso).

Tenga en cuenta que, en todos los casos, los archivos / carpetas están codificados por id''s ( 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 ubicar su búsqueda.

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

Asegúrate de que contiene algunos archivos, en los que queremos descargar a CoLab. Para obtener el ID de la carpeta para que PyDrive lo use, mire la URL y extraiga el parámetro ID. En este caso, la url correspondiente a la carpeta era:

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

El problema es simple: 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.ipynb , por ejemplo) sugieren que solo se carguen principalmente todos los datos necesarios en el cuaderno.

Pero, si tengo muchos datos, puede ser bastante complicado. ¿Hay alguna oportunidad para resolver este problema?

¡Gracias por la ayuda!


¡Gracias por las buenas respuestas! La forma más rápida de obtener algunos archivos únicos para Colab desde la unidad de Google: Cargue el controlador de la unidad 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 de nuevo en el indicador 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"

Confirmar que los archivos fueron copiados:

!ls


@wenkesj

Estoy hablando de copiar el directorio y todos sus subdirectorios.

Para mí, encontré una solución, que se ve así:

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)

Sin embargo, parece que a gDrive no le gusta copiar demasiados archivos.


Hay muchas maneras de leer los archivos en su cuaderno colab (**. Ipnb), algunas son:

  1. Montaje de su Google Drive en la máquina virtual del tiempo de ejecución. here y here
  2. Utilizando google.colab.files.upload (). la solución más fácil
  3. Usando la API REST nativa ;
  4. Usar un contenedor alrededor de la API como PyDrive

Los métodos 1 y 2 funcionaron para mí , no pude descifrar. Si alguien puede, como otros intentaron en la publicación anterior, escriba una respuesta elegante. gracias por adelantado.!

Primer método:

No pude montar mi disco de Google, así que instalé estas bibliotecas

# 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}

Una vez finalizado el proceso de instalación y autorización, primero debe montar su unidad.

!mkdir -p drive !google-drive-ocamlfuse drive

Después de la instalación pude montar la unidad de Google, todo en su unidad de Google comienza desde / content / unidad

!ls /content/drive/ML/../../../../path_to_your_folder/

Ahora simplemente puede leer el archivo de la carpeta path_to_your_folder en pandas usando la ruta anterior.

import pandas as pd df = pd.read_json(''drive/ML/../../../../path_to_your_folder/file.json'') df.head(5)

Supongamos que usa la ruta absoluta que recibió y no usa /../ ..

Segundo método :

Lo que es conveniente, si el archivo que desea leer está presente en el directorio de trabajo actual.

Si necesita cargar algún archivo de su sistema de archivos local, puede usar el código a continuación, de lo contrario, simplemente evítelo.

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])))

Supongamos que tiene debajo de la jerarquía de carpetas en su unidad de Google:

/content/drive/ML/../../../../path_to_your_folder/

Entonces, simplemente necesitas el código de abajo para cargar en pandas.

import pandas as pd import io df = pd.read_json(io.StringIO(uploaded[''file.json''].decode(''utf-8''))) df


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

Para montar el disco de Google a 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 su unidad de Google se cargará en la pestaña Archivos. Ahora puede acceder a cualquier archivo desde su colab, puede escribir y leer desde él. Los cambios se realizarán en tiempo real en su disco y cualquier persona que tenga el enlace de acceso a su archivo podrá ver los cambios realizados por usted desde su colab.

Ejemplo

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


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 ejemplo de cuaderno


Simplemente puede hacer uso de los fragmentos de código a la izquierda de la pantalla. introduzca la descripción de la imagen aquí

Inserte "Montaje de Google Drive en su máquina virtual"

ejecuta el código y copia y pega el código en la URL

y luego use! ls para verificar los directorios

!ls /gdrive

para la mayoría de los casos, encontrará lo que desea en el directorio "/ gdrive / My drive"

entonces puedes llevarlo a cabo así:

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)