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:
- Montaje de su Google Drive en la máquina virtual del tiempo de ejecución. here y here
- Utilizando google.colab.files.upload (). la solución más fácil
- Usando la API REST nativa ;
- 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.
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)