web-dev-qa-db-fra.com

Google Colab: comment lire les données de mon lecteur Google?

Le problème est simple: j'ai des données sur gDrive, par exemple à l'adresse /projects/my_project/my_data*.

De plus, j'ai un simple cahier dans gColab.

Donc, j'aimerais faire quelque chose comme:

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

Malheureusement, tous les exemples (comme celui-ci - https://colab.research.google.com/notebook#fileId=/v2/external/notebooks/io.ipynb , par exemple) suggèrent de charger principalement toutes les données nécessaires. au cahier.

Mais si j'ai beaucoup de données, cela peut être assez compliqué. Y a-t-il des possibilités de résoudre ce problème?

Merci pour l'aide!

25
Scitator

Bonne nouvelle, PyDrive a un support de première classe sur CoLab! PyDrive est un wrapper pour le client python Google Drive. Voici un exemple sur la façon de télécharger TOUS LES FICHIERS depuis un dossier, comme si vous utilisiez 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())

Notez que les arguments de drive.ListFile sont un dictionnaire qui coïncide avec les paramètres utilisés par API HTTP de Google Drive ((vous pouvez personnaliser le paramètre q pour l'adapter à votre cas d'utilisation). 

Sachez que dans tous les cas, les fichiers/dossiers sont codés par des identifiants (peep le 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk) sur Google Drive. Pour ce faire, vous devez rechercher dans Google Drive l'ID spécifique correspondant au dossier dans lequel vous souhaitez rooter votre recherche. 

Par exemple, accédez au dossier "/projects/my_project/my_data" qui contient Dans votre Google Drive. 

Google Drive

Voir qu’il contient des fichiers dans lesquels nous souhaitons télécharger CoLab. Pour obtenir l'id du dossier afin de pouvoir l'utiliser avec PyDrive, regardez l'url et extrayez le paramètre id. Dans ce cas, l'URL correspondant au dossier était:

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

Où id est le dernier élément de l'URL: 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk.

27
wenkesj

Vous pouvez monter vos fichiers Google Drive en exécutant l'extrait de code suivant:

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

Ensuite, vous pouvez interagir avec vos fichiers Drive dans le panneau latéral du navigateur de fichiers ou à l’aide d’utilitaires de ligne de commande.

Voici un exemple de carnet

50
Bob Smith

Vous ne pouvez pas stocker de manière permanente un fichier sur colab. Bien que vous puissiez importer des fichiers depuis votre lecteur, vous pouvez le sauvegarder à chaque fois que vous avez terminé.

Pour monter le lecteur Google dans votre session Colab

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

vous pouvez simplement écrire sur le lecteur google comme vous le feriez sur un système de fichiers local Maintenant, si vous voyez que votre lecteur google sera chargé dans l'onglet Fichiers. Maintenant, vous pouvez accéder à n’importe quel fichier depuis votre colab, vous pouvez écrire et lire. Les modifications seront effectuées en temps réel sur votre lecteur et toute personne disposant du lien d'accès à votre fichier pourra afficher les modifications apportées par vous à partir de votre colab.

Exemple

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

Merci pour les bonnes réponses! Le moyen le plus rapide d’obtenir quelques fichiers uniques de Colab à partir de Google Drive: Chargez l’aide de lecteur et montez

from google.colab import drive

Cela demandera une autorisation.

drive.mount('/content/drive')

Ouvrez le lien dans un nouvel onglet -> vous obtiendrez un code - recopiez-le dans l'invitevous avez maintenant accès à Google Drive Check:

!ls "/content/drive/My Drive"

puis copiez le ou les fichiers au besoin:

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

confirmez que les fichiers ont été copiés:

!ls
3
H-San

Vous pouvez simplement utiliser les extraits de code à gauche de l'écran . entrez la description de l'image ici

Insérez "Montage de Google Drive dans votre ordinateur virtuel".

lancez le code et copiez/collez le code dans l'URL

puis utilisez! ls pour vérifier les répertoires

!ls /gdrive

dans la plupart des cas, vous trouverez ce que vous voulez dans le répertoire "/ gdrive/My drive"

alors vous pouvez le réaliser comme ceci:

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)
1
VGA Lee

@wenkesj

Je parle de copier le répertoire et tous les sous-répertoires.

Pour moi, j'ai trouvé une solution, qui ressemble à ceci:

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)

Néanmoins, il semble que gDrive n'aime pas copier trop de fichiers.

0
Scitator

Je suis paresseux et ma mémoire est mauvaise, alors j’ai décidé de créer easycolab qui est plus facile à mémoriser et à taper

import easycolab as ec
ec.mount()

Assurez-vous de l'installer d'abord: !pip install easycolab

La méthode mount() implémente essentiellement ceci:

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