গুগল কোলাব: আমার গুগল ড্রাইভ থেকে কীভাবে ডেটা পড়বেন?


114

সমস্যাটি সহজ: আমার কাছে জিড্রাইভের কিছু তথ্য রয়েছে, উদাহরণস্বরূপ /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/extern/notebooks/io.ipynb , উদাহরণস্বরূপ) কেবলমাত্র প্রয়োজনীয় সমস্ত ডেটা নোটবুকে লোড করার পরামর্শ দেয়।

তবে, আমার কাছে যদি ডেটা টুকরো টুকরো থাকে তবে তা বেশ জটিল হতে পারে। এই সমস্যাটি সমাধান করার কোনও সুযোগ আছে কি?

সাহায্যের জন্য ধন্যবাদ!


9
বিস্ময়কর! এই কোলাব নোটবুকটিতে কেউ লিঙ্ক দেয়নি যা এপ্রিল 2019 হিসাবে উপলব্ধ সমস্ত পদ্ধতির বিবরণ দেয় - colab.research.google.com/notebooks/io.ipynb
মানব

উত্তর:


61

সুসংবাদ, পাইড্রাইভের কোলাবে প্রথম শ্রেণির সমর্থন রয়েছে! পাইড্রাইভ হ'ল গুগল ড্রাইভ অজগর ক্লায়েন্টের একটি মোড়ক। আপনি + + ব্যবহারের অনুরূপ কোনও ফোল্ডার থেকে সমস্ত ফাইল কীভাবে ডাউনলোড করবেন তার একটি উদাহরণ এখানে রয়েছে :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হ'ল একটি অভিধান যা গুগল ড্রাইভ এইচটিটিপি এপিআই দ্বারা ব্যবহৃত প্যারামিটারগুলির সাথে মিলে যায় (আপনি qআপনার ব্যবহারের ক্ষেত্রে প্যারামিটারটি কাস্টমাইজ করতে পারেন )।

জেনে রাখুন যে সমস্ত ক্ষেত্রে, ফাইল / ফোল্ডারগুলিকে আইডি এর মাধ্যমে এনকোড করা হয় ( 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk দেখুন ) Google ড্রাইভে। এর জন্য আপনার যে অনুসন্ধানটি মূলত অনুসন্ধান করতে চান সেই ফোল্ডারের সাথে সম্পর্কিত নির্দিষ্ট আইডির জন্য আপনি গুগল ড্রাইভ অনুসন্ধান করতে হবে।

উদাহরণস্বরূপ, "/projects/my_project/my_data"আপনার গুগল ড্রাইভে অবস্থিত ফোল্ডারে নেভিগেট করুন ।

গুগল ড্রাইভ

দেখুন এটিতে কিছু ফাইল রয়েছে, যার মধ্যে আমরা কোলাবে ডাউনলোড করতে চাই। ফাইলে পিডিড্রাইভ দ্বারা এটি ব্যবহার করতে আইডি পেতে, ইউআরএলটি দেখুন এবং আইডি প্যারামিটারটি বের করুন। এই ক্ষেত্রে, ফোল্ডারের সাথে সম্পর্কিত ইউআরএলটি ছিল:

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

যেখানে আইডিটি ইউআরএল এর শেষ অংশ: 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk


4
ধন্যবাদ! এটা সত্যিই কাজ করেছে! এবং পুরো জিড্রাইভ ডিরেক্টরি অনুলিপি করার কোনও সমাধান কি আপনি জানেন?
স্কিটিটার

@ স্কিটিটর বলতে কী আপনি গুগল ড্রাইভের মধ্যে থাকা সমস্ত ফাইল বোঝাতে চাইছেন?
wenkesj

@ স্কিটিটার দয়া করে আপনার প্রশ্নের জন্য পাইথনহসটেড.আর / পাইড্রাইভ/… একবার দেখুন
ওয়েঙ্কসজে

4
উত্তরের জন্য ধন্যবাদ. এটি কাজ করে তবে কোনওভাবে আমি কিছু বুঝতে পারি না। এটি এখন যেভাবে কাজ করছে (যতদূর আমি বুঝতে পারি) এটি Google ড্রাইভে "লোকাল_ডাউনলোড_পথ" এর অধীনে প্রদত্ত পথে ডেটা সঞ্চয় করে! তবে ডেটা গুগল ড্রাইভে ইতিমধ্যে রয়েছে (একটি নির্দিষ্ট ফোল্ডার আইডি দ্বারা এনকোডড)। কেন আমাদের এটি করা দরকার? আমি বোঝাতে চাইছি ফাইল / ফাইলগুলি ইতিমধ্যে গুগল ড্রাইভের মধ্যে রয়েছে !! আমি প্রচুর চিত্রযুক্ত ফোল্ডার পড়ার জন্য এই পদ্ধতিটি ব্যবহার করে দেখেছি এবং আমার কম্পিউটার হিমশীতল! যখন আমি এই কোডটি চালিয়েছি, এটি আসলে সমস্ত স্থানীয় চিত্র (যা ইতিমধ্যে গুগল ড্রাইভে রয়েছে) "স্থানীয়_ডাউনলোড_পথ" এ অনুলিপি করার চেষ্টা করেছিল ??
টুইনপেনগুইনস

4
ঠিক আছে, আমি দ্বিতীয় উত্তরটি ব্যবহার করে শেষ করেছি (নীচে দেখুন)। এটি অত্যন্ত সহজ এবং সহজ। নীচের উত্তরগুলি ব্যবহার করতে আপনার যদি এখনও সমস্যা হয় তবে আমাকে বলুন।
টুইনপেনগুইনস

266

সম্পাদনা করুন : 2020 ফেব্রুয়ারী, এখন স্বয়ংক্রিয়ভাবে ড্রাইভ মাউন্ট করার জন্য একটি প্রথম শ্রেণির UI রয়েছে।

প্রথমে বাম পাশে ফাইল ব্রাউজারটি খুলুন। এটি একটি 'মাউন্ট ড্রাইভ' বোতাম প্রদর্শন করবে। একবার ক্লিক করার পরে, আপনি ড্রাইভ মাউন্ট করার জন্য একটি অনুমতি প্রম্পট দেখতে পাবেন এবং তারপরে আপনি নোটবুকটিতে ফিরে আসার পরে আপনার ড্রাইভ ফাইলগুলি কোনও সেটআপ ছাড়াই উপস্থিত থাকবে। সম্পন্ন প্রবাহটি দেখতে এমন দেখাচ্ছে:

ড্রাইভ অটো মাউন্ট উদাহরণ

মূল উত্তরটি নীচে, নীচে অনুসরণ করা হয়েছে। (এটি এখনও ভাগ করা নোটবুকগুলির জন্য কাজ করবে।)

নিম্নলিখিত কোড স্নিপেট চালিয়ে আপনি আপনার গুগল ড্রাইভ ফাইলগুলি মাউন্ট করতে পারেন:

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

তারপরে, আপনি ফাইল ব্রাউজারের সাইড প্যানেলে বা কমান্ড-লাইন ইউটিলিটিগুলি ব্যবহার করে আপনার ড্রাইভ ফাইলগুলির সাথে যোগাযোগ করতে পারেন।

এখানে একটি উদাহরণ নোটবুক


39
এটি আপনার জিড্রাইভকে গুগল কোলাবে মাউন্ট করার সর্বাধিক সোজা সামনের সমাধান, আমি মনে করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
বুঞ্চিস

ক্যানোনিকাল উত্তর, দুর্দান্ত। উদাহরণ নোটবুক কেবল পঠনযোগ্য এবং সরাসরি ব্যবহার করা যায় না। ফাইল-> সেভ করা ড্রাইভের জন্য একটি ফাইল সংরক্ষণ করবে।
BSalita

কীভাবে আপনি অন্য স্তরে যেতে পারেন? যেমন। ড্রাইভ.মাউন্ট ('/ কন্টেন্ট / ড্রাইভ / স্থান সহ নাম')
ইকলাস ইসমাইল

প্রতিবার আপনার গুগল ড্রাইভটি সংযুক্ত করার জন্য আপনাকে কি প্রমাণীকরণ করতে হবে?
ফ্র্যাঙ্ক মুলিউনার

@ ফ্র্যাঙ্কমিউলনার হ্যাঁ
ডিবি

32

দুর্দান্ত উত্তরের জন্য ধন্যবাদ! গুগল ড্রাইভ থেকে কুলাবের কাছে কয়েকটি ওয়ান-অফ ফাইল পাওয়ার দ্রুততম উপায়: ড্রাইভ সহায়কটি লোড করুন এবং মাউন্ট করুন

from google.colab import drive

এটি অনুমোদনের জন্য অনুরোধ জানাবে।

drive.mount('/content/drive')

একটি নতুন ট্যাবে লিঙ্কটি খুলুন-> আপনি একটি কোড পাবেন - সেই প্রম্পটে আবার অনুলিপি করুন আপনার এখন গুগল ড্রাইভ চেকটিতে অ্যাক্সেস রয়েছে:

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

গুগল ড্রাইভকে সিও ল্যাব-এ মাউন্ট করার সহজতম এবং দ্রুততম উপায় হিসাবে আমি এটি আবিষ্কার করেছি , আপনি mount directory locationকেবলমাত্র প্যারামিটার পরিবর্তন করে যা চান তা পরিবর্তন করতে পারেন drive.mount। এটি আপনাকে আপনার অ্যাকাউন্টের সাথে অনুমতিগুলি গ্রহণ করার জন্য একটি লিঙ্ক দেবে এবং তারপরে আপনাকে উত্পন্ন কীটি আটকে দিতে হবে এবং তারপরে ড্রাইভটি নির্বাচিত পথে মাউন্ট করা হবে।

force_remount আপনি কেবল ড্রাইভ মাউন্ট করতে হবে যখন এটি পূর্বে লোড হয়েছে কিনা তা বিবেচনা করেই ব্যবহৃত হয় you আপনি যদি মাউন্টটি চাপ দিতে না চান তবে প্যারামিটারটি আপনি এটিকে অবহেলা করতে পারবেন

সম্পাদনা করুন: IOকোলাব https://colab.research.google.com/notebooks/io.ipynb এ অপারেশন করার আরও উপায়গুলি খুঁজতে এটি পরীক্ষা করে দেখুন


13

আপনি কোলাবে স্থায়ীভাবে কোনও ফাইল সঞ্চয় করতে পারবেন না। যদিও আপনি আপনার ড্রাইভ থেকে ফাইলগুলি আমদানি করতে পারবেন এবং প্রতিবার যখন আপনি ফাইলটি সম্পন্ন করবেন তখন আপনি এটি আবার সংরক্ষণ করতে পারবেন।

গুগল ড্রাইভটি আপনার কলাব সেশনে মাউন্ট করতে

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

আপনি কোনও স্থানীয় ফাইল সিস্টেমে যেমন গুগল ড্রাইভে লিখতে পারেন এখন আপনি যদি দেখেন যে আপনার গুগল ড্রাইভটি ফাইল ট্যাবে লোড হবে। এখন আপনি আপনার কোলাব থেকে যে কোনও ফাইল অ্যাক্সেস করতে পারবেন, আপনি এটি পড়তে পাশাপাশি লিখতেও পারেন। পরিবর্তনগুলি আপনার ড্রাইভে আসল সময়ে করা হবে এবং আপনার ফাইলে অ্যাক্সেস লিঙ্ক থাকা যে কেউ আপনার কোলাব থেকে করা পরিবর্তনগুলি দেখতে পাবে।

উদাহরণ

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

7

আমি যা করেছি তা প্রথম:

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

তারপরে

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

পরে আমি উদাহরণস্বরূপ সিএসভি ফাইলগুলি পড়তে পারি

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

আপনার যদি ফাইলগুলির জন্য পৃথক অবস্থান থাকে তবে আমার ড্রাইভের পরে সঠিক পথটি যুক্ত করুন


5

আমি অলস এবং আমার স্মৃতিশক্তি খারাপ, তাই আমি সিদ্ধান্ত নিয়েছি ইজাইকোলব তৈরি করব যা মুখস্থ করে টাইপ করা সহজ:

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

আপনি কেবল স্ক্রিনের বাম দিকে কোড স্নিপেট ব্যবহার করতে পারেন। এখানে চিত্র বর্ণনা লিখুন

"আপনার ভিএম এ মাউন্টিং গুগল ড্রাইভ" sertোকান

কোডটি চালান এবং URL টিতে অনুলিপি করুন এবং কোডটি আটকে দিন

এবং তারপরে ডিরেক্টরিগুলি পরীক্ষা করতে ls ব্যবহার করুন

!ls /gdrive

বেশিরভাগ ক্ষেত্রে, আপনি "/ gdrive / আমার ড্রাইভ" ডিরেক্টরিতে যা চান তা পাবেন

তাহলে আপনি এটি এভাবে চালিয়ে যেতে পারেন:

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

আমি একটি ক্লাস লিখেছিলাম যা '' তে সমস্ত ডেটা ডাউনলোড করে। কোলাব সার্ভারে অবস্থান

পুরো জিনিসটি এখান থেকে টানা যাবে 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

উদাহরণস্বরূপ গুগল কোলাব নোটবুক থেকে গুগল ড্রাইভ জিপ বের করতে:

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

1

একটি ফোল্ডারে সমস্ত ফাইল পড়তে:

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

@ ওয়েঙ্কেকজ

আমি ডিরেক্টরি এবং এটির সমস্ত উপ-ডিরেক্টরিগুলি অনুলিপি করার বিষয়ে বলছি।

আমার জন্য, আমি একটি সমাধান পেয়েছি, এটি দেখতে এরকম দেখাচ্ছে:

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)

তবুও, আমি দেখতে জিডিড্রাইভ খুব বেশি ফাইল অনুলিপি করতে পছন্দ করেন না বলে মনে হচ্ছে।


0

আপনার কোলাব নোটবুক (**। Ipnb) এ ফাইলগুলি পড়ার অনেকগুলি উপায় রয়েছে, কয়েকটি হল:

  1. রানটাইমের ভার্চুয়াল মেশিনে আপনার গুগল ড্রাইভ মাউন্ট করা। এখানে এবং এখানে
  2. Google.colab.files.upload () ব্যবহার করে। সবচেয়ে সহজ সমাধান
  3. নেটিভ আরএসটি এপিআই ব্যবহার করে ;
  4. পিডিড্রাইভের মতো এপিআই এর চারপাশে একটি মোড়ক ব্যবহার করা

পদ্ধতি 1 এবং 2 আমার জন্য কাজ করেছে , বিশ্রাম আমি বের করতে সক্ষম হইনি। উপরের পোস্টে অন্যরা যেমন চেষ্টা করেছিল কেউ যদি পারেন তবে দয়া করে একটি সুন্দর উত্তর লিখুন। আগাম ধন্যবাদ.!

প্রথম পদ্ধতি:

আমি আমার গুগল ড্রাইভ মাউন্ট করতে সক্ষম হইনি, তাই আমি এই লাইব্রেরিগুলি ইনস্টল করেছি

# 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

ইনস্টলেশন শেষে আমি গুগল ড্রাইভ মাউন্ট করতে সক্ষম হয়েছি, আপনার গুগল ড্রাইভের সমস্ত কিছুই / সামগ্রী / ড্রাইভ থেকে শুরু হয়

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

ধরুন আপনার গুগল ড্রাইভে ফোল্ডার হায়ারার্কির নীচে রয়েছে:

/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
from google.colab import drive
drive.mount('/content/drive')

এটি আমার জন্য নিখুঁতভাবে কাজ করেছিল আমি পরে osআমার পিসিতে কীভাবে এগুলি অ্যাক্সেস করতে পারি তার মতোভাবে আমার ফাইলগুলি অ্যাক্সেস করতে লাইব্রেরিটি ব্যবহার করতে সক্ষম হয়েছি


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.