Google Colab: मेरे Google ड्राइव से डेटा कैसे पढ़ें?


113

समस्या सरल है: मेरे पास 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 , उदाहरण के लिए) केवल मुख्य रूप से सभी आवश्यक डेटा को नोटबुक में लोड करने का सुझाव देते हैं।

लेकिन, अगर मेरे पास बहुत सारे डेटा हैं, तो यह काफी जटिल हो सकता है। क्या इस मुद्दे को हल करने के लिए कोई अवसर है?

सहायता के लिए धन्यवाद!


9
चौंका देने वाला! किसी ने भी इस कोलाब नोटबुक का लिंक नहीं दिया जो अप्रैल 2019 तक उपलब्ध सभी विधियों का वर्णन करता है - colab.research.google.com/notebooks/io.ipynb
मानव

जवाबों:


60

खुशखबरी, PyDrive में CoLab पर प्रथम श्रेणी का समर्थन है! PyDrive Google Drive python क्लाइंट के लिए एक आवरण है। यहाँ एक उदाहरण दिया गया है कि कैसे आप एक फ़ोल्डर से सभी फ़ाइलों को डाउनलोड करेंगे , जैसे कि 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 ड्राइव HTTP एपीआई द्वारा उपयोग किए जाने वाले मापदंडों के साथ मेल खाता है (आप qअपने उपयोग के मामले में किए जाने वाले पैरामीटर को अनुकूलित कर सकते हैं )।

यह जान लें कि सभी मामलों में, Google डिस्क पर आईडी / ( 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk को दबाकर ) फाइल / फोल्डर को एनकोड किया जाता है । इसके लिए आवश्यक है कि आप उस विशिष्ट आईडी के लिए Google डिस्क खोजें, जिस फ़ोल्डर में आप अपनी खोज को रूट करना चाहते हैं।

उदाहरण के लिए, "/projects/my_project/my_data"अपने Google ड्राइव में स्थित फ़ोल्डर में नेविगेट करें ।

गूगल ड्राइव

देखें कि इसमें कुछ फाइलें हैं, जिसमें हम CoLab को डाउनलोड करना चाहते हैं। PyDrive द्वारा इसका उपयोग करने के लिए फ़ोल्डर की आईडी प्राप्त करने के लिए, url को देखें और id पैरामीटर निकालें। इस स्थिति में, फ़ोल्डर के लिए संगत यूआरएल था:

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

जहां आईडी url का अंतिम टुकड़ा है: 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk


1
धन्यवाद! यह सचमुच काम करता है! और क्या आप संपूर्ण gDrive निर्देशिका को कॉपी करने के लिए कोई समाधान जानते हैं?
19

@ संचालक क्या आप Google डिस्क के भीतर सभी फ़ाइलों का मतलब है?
wenkesj

@ संचालक कृपया अपने प्रश्न के लिए pythonhosted.org/PyDrive/… पर एक नज़र डालें
wenkesj

1
उत्तर के लिए धन्यवाद। यह काम करता है, लेकिन किसी तरह मुझे कुछ समझ में नहीं आता है। जिस तरह से यह अब काम कर रहा है (जहां तक ​​मैं समझता हूं) यह है कि यह Google ड्राइव पर "local_download_path" के तहत दिए गए पथ पर डेटा संग्रहीत करता है! लेकिन डेटा पहले से ही Google ड्राइव में है (एक विशिष्ट फ़ोल्डर आईडी द्वारा एन्कोडेड)। हमें ऐसा करने की आवश्यकता क्यों है? मेरा मतलब है कि फ़ाइल / फाइलें पहले से ही Google डिस्क के भीतर हैं !! मैंने बहुत सारी छवियों वाले फ़ोल्डर को पढ़ने के लिए इस विधि को आजमाया है, और मेरे कंप्यूटर को फ्रीज किया है! जब मैंने इस कोड को चलाया, तो उसने वास्तव में सभी छवियों को कॉपी करने की कोशिश की (जो कि Google ड्राइव में पहले से ही है) "local_download_path" ??
ट्विनपाइपिन्स

1
खैर, मैंने दूसरा उत्तर (नीचे देखें) का उपयोग करके समाप्त किया। यह सुपर सरल और आसान है। मुझे बताएं कि क्या आपको अभी भी नीचे दिए गए उत्तरों का उपयोग करने में समस्या है।
जुड़वाँ पेंगुइन

250

संपादित करें : फरवरी, 2020 तक, अब स्वचालित रूप से बढ़ते ड्राइव के लिए प्रथम श्रेणी का UI है।

सबसे पहले, बाईं ओर फ़ाइल ब्राउज़र खोलें। यह एक will माउंट ड्राइव ’बटन दिखाएगा। क्लिक करने के बाद, आपको ड्राइव को माउंट करने के लिए एक अनुमति प्रॉम्प्ट दिखाई देगा, और बाद में जब आप नोटबुक पर लौटेंगे तो आपकी ड्राइव फाइलें बिना किसी सेटअप के मौजूद होंगी। पूरा प्रवाह ऐसा दिखता है:

ड्राइव ऑटो माउंट उदाहरण

मूल उत्तर निम्नानुसार है। (यह अभी भी साझा नोटबुक के लिए काम करेगा।)

आप निम्न कोड स्निपेट चलाकर अपनी Google डिस्क फ़ाइलों को माउंट कर सकते हैं:

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

उसके बाद, आप फ़ाइल ब्राउज़र साइड पैनल में अपनी ड्राइव फ़ाइलों के साथ या कमांड-लाइन उपयोगिताओं के साथ बातचीत कर सकते हैं।

यहाँ एक उदाहरण नोटबुक है


36
यह सबसे सीधा फॉरवर्ड समाधान है, अपने gdrive को google colab पर माउंट करने के लिए, मुझे लगता है कि यह स्वीकृत उत्तर होना चाहिए
buncis

विहित जवाब, अच्छा। उदाहरण नोटबुक केवल-पढ़ने के लिए है और इसे सीधे उपयोग नहीं किया जा सकता है। फाइल करना-> सेव करने से ड्राइव करने के लिए फाइल सेव होगी।
बसलिता

आप दूसरे स्तर पर कैसे जा सकते हैं? उदाहरण के लिए। Drive.mount ('/ कंटेंट / ड्राइव / स्पेस के साथ नाम')
Iqlaas Ismail

क्या आपको अपने Google ड्राइव को कनेक्ट करने के लिए हर बार प्रमाणित करना होगा?
फ्रैंक मीलेनार

@FrankMeulenaar हां
DB

31

महान जवाब के लिए धन्यवाद! 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"

पुष्टि करें कि फ़ाइलों की प्रतिलिपि बनाई गई थी:

!ls

क्या कोलाब में मेरी ड्राइव में केवल विशिष्ट निर्देशिका को माउंट करना संभव है?
गौतम एम

मुझे डर है कि वर्तमान में संभव नहीं है
हिमांशु पोद्दार

16

पिछले जवाबों में से अधिकांश थोड़ा (बहुत) जटिल हैं,

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

मुझे लगा कि सीओ लैब में Google ड्राइव को माउंट करने का सबसे आसान और तेज़ तरीका है , आप mount directory locationकभी भी उस पैरामीटर को बदल सकते हैं जिसे आप बस के लिए पैरामीटर बदलकर चाहते हैं drive.mount। यह आपको अपने खाते से अनुमतियों को स्वीकार करने के लिए एक लिंक देगा और फिर आपको जनरेट की गई कुंजी को कॉपी करना होगा और फिर चयनित पथ में ड्राइव को माउंट करना होगा।

force_remount इसका उपयोग केवल तब ही किया जाता है जब आपको ड्राइव को माउंट करना हो, चाहे इसके पहले से लोड किया गया हो। यदि आप माउंट नहीं करना चाहते हैं तो पैरामीटर की उपेक्षा कर सकते हैं।

संपादित करें: IOकोलाब में परिचालन करने के अधिक तरीकों को जानने के लिए इसकी जांच करें https://colab.research.google.com/notebooks/io.ipbb


13

आप स्थायी रूप से कोलाब पर फ़ाइल संग्रहीत नहीं कर सकते। यद्यपि आप अपनी ड्राइव से फ़ाइलों को आयात कर सकते हैं और हर बार जब आप फ़ाइल के साथ किया जाता है तो आप इसे वापस बचा सकते हैं।

अपने कोलाब सत्र में Google ड्राइव को माउंट करने के लिए

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

आप बस एक स्थानीय फ़ाइल सिस्टम के लिए Google ड्राइव पर लिख सकते हैं। अब यदि आप देखते हैं कि आपका Google ड्राइव फ़ाइल टैब में लोड किया जाएगा। अब आप अपने कोलाब से किसी भी फाइल को एक्सेस कर सकते हैं, आप इसे लिखने के साथ-साथ पढ़ भी सकते हैं। आपके ड्राइव पर वास्तविक समय में परिवर्तन किए जाएंगे और आपकी फ़ाइल का एक्सेस लिंक आपके कोलाब से किए गए परिवर्तनों को देख सकता है।

उदाहरण

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

4

मैं आलसी हूँ और मेरी याददाश्त ख़राब है, इसलिए मैंने इजीकोलैब बनाने का फैसला किया जो याद रखने और टाइप करने में आसान हो:

import easycolab as ec
ec.mount()

पहले इसे स्थापित करना सुनिश्चित करें: !pip install easycolab

mount()मूल रूप से इसे लागू करने की विधि:

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

2

आप बस स्क्रीन के बाईं ओर कोड स्निपेट का उपयोग कर सकते हैं। यहां छवि विवरण दर्ज करें

अपने VM में "बढ़ते Google ड्राइव" डालें

कोड चलाएं और URL में कोड को कॉपी और पेस्ट करें

और फिर निर्देशिकाओं की जांच करने के लिए ls का उपयोग करें

!ls /gdrive

अधिकांश मामलों के लिए, आप पाएंगे कि आप निर्देशिका में क्या चाहते हैं "/ gdrive / My ड्राइव"

तो आप इसे इस तरह से ले सकते हैं:

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)

2

मैंने जो किया है वह पहला है:

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

फिर

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

उदाहरण के लिए मैं सीएसवी फाइलों को पढ़ सकता हूं

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

यदि आपके पास फ़ाइलों के लिए अलग-अलग स्थान हैं, तो My Drive के बाद सही पथ जोड़ें


1

मैंने एक वर्ग लिखा है जो सभी डेटा को 'डाउनलोड करता है।' कोलाब सर्वर में स्थान

पूरी बात यहाँ से खींचा जा सकता 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)

1

उदाहरण के लिए Google कोलाब नोटबुक से Google ड्राइव ज़िप निकालने के लिए:

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

0

@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 को बहुत अधिक फ़ाइलों को कॉपी करना पसंद नहीं है।


0

आपके कोलाब नोटबुक में फ़ाइलों को पढ़ने के कई तरीके हैं (**। ipnb), कुछ इस प्रकार हैं:

  1. रनटाइम की वर्चुअल मशीन में अपने Google ड्राइव को माउंट करना। यहाँ और यहाँ
  2. Google.colab.files.upload () का उपयोग करना। सबसे आसान उपाय
  3. देशी रीस्ट एपीआई का उपयोग करना ;
  4. एपीआई के चारों ओर एक आवरण का उपयोग करना जैसे कि PyDrive

विधि 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}

एक बार इंस्टॉलेशन और प्राधिकरण प्रक्रिया समाप्त हो जाने के बाद, आप पहली बार अपने ड्राइव को माउंट करते हैं।

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

स्थापना के बाद मैं Google ड्राइव को माउंट करने में सक्षम था, आपके Google ड्राइव में सब कुछ / सामग्री / ड्राइव से शुरू होता है

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

अब आप बस path_to_your_folderउपरोक्त पथ का उपयोग करके फ़ोल्डर से पांडा में फ़ाइल पढ़ सकते हैं ।

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 ड्राइव में फ़ोल्डर पदानुक्रम से नीचे है:

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

फिर, आपको बस पांडा में लोड करने के लिए कोड की आवश्यकता है।

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

0

किसी फ़ोल्डर में सभी फ़ाइलों को पढ़ने के लिए:

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)

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

यह मेरे लिए एकदम सही था मैं बाद में osअपनी फ़ाइलों तक पहुंचने के लिए पुस्तकालय का उपयोग करने में सक्षम था जैसे मैं उन्हें अपने पीसी पर कैसे एक्सेस करता हूं


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.