Masalahnya sederhana: Saya memiliki beberapa data di gDrive, misalnya di
/projects/my_project/my_data*
.
Saya juga memiliki notebook sederhana di gColab.
Jadi, saya ingin melakukan sesuatu seperti:
for file in glob.glob("/projects/my_project/my_data*"):
do_something(file)
Sayangnya, semua contoh (seperti ini - https://colab.research.google.com/notebook#fileId=/v2/external/notebooks/io.ipynb , misalnya) menyarankan agar hanya memuat semua data yang diperlukan ke notebook.
Tetapi, jika saya memiliki banyak data, itu bisa menjadi sangat rumit. Apakah ada peluang untuk menyelesaikan masalah ini?
Terimakasih atas bantuannya!
python
google-colaboratory
Scitator
sumber
sumber
Jawaban:
Kabar baiknya , PyDrive memiliki dukungan kelas satu di CoLab! PyDrive adalah pembungkus untuk klien python Google Drive. Berikut adalah contoh bagaimana Anda akan mengunduh SEMUA file dari folder, mirip dengan menggunakan
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())
Perhatikan bahwa argumen ke
drive.ListFile
adalah kamus yang sesuai dengan parameter yang digunakan oleh API HTTP Google Drive (Anda dapat menyesuaikanq
parameter untuk disesuaikan dengan kasus penggunaan Anda).Ketahuilah bahwa dalam semua kasus, file / folder dikodekan oleh id (intip 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk ) di Google Drive. Ini mengharuskan Anda mencari Google Drive untuk id tertentu yang sesuai dengan folder tempat Anda ingin root pencarian Anda.
Misalnya, navigasikan ke folder
"/projects/my_project/my_data"
yang terletak di Google Drive Anda.Lihat bahwa itu berisi beberapa file, yang ingin kami unduh ke CoLab. Untuk mendapatkan id dari folder untuk digunakan oleh PyDrive, lihat url dan ekstrak parameter id. Dalam kasus ini, url yang sesuai dengan folder tersebut adalah:
Di mana id adalah bagian terakhir dari url: 1SooKSw8M4ACbznKjnNrYvJ5wxuqJ-YCk .
sumber
Sunting : Mulai Februari 2020, sekarang ada UI kelas satu untuk memasang Drive secara otomatis.
Pertama, buka file browser di sisi kiri. Ini akan menampilkan tombol 'Mount Drive'. Setelah diklik, Anda akan melihat permintaan izin untuk memasang Drive, dan setelah itu file Drive Anda tidak akan ada penyiapan saat Anda kembali ke notebook. Alur yang selesai terlihat seperti ini:
Berikut jawaban aslinya, di bawah ini. (Ini juga akan tetap berfungsi untuk buku catatan bersama.)
Anda dapat memasang file Google Drive Anda dengan menjalankan cuplikan kode berikut:
from google.colab import drive drive.mount('/content/drive')
Kemudian, Anda dapat berinteraksi dengan file Drive Anda di panel sisi browser file atau menggunakan utilitas baris perintah.
Berikut adalah contoh notebook
sumber
Terima kasih atas jawaban yang bagus! Cara tercepat untuk mendapatkan beberapa file satu kali ke Colab dari Google drive: Muat pembantu Drive dan pasang
from google.colab import drive
Ini akan meminta otorisasi.
drive.mount('/content/drive')
Buka tautan di tab baru-> Anda akan mendapatkan kode - salin kembali ke prompt Anda sekarang memiliki akses ke pemeriksaan google drive:
!ls "/content/drive/My Drive"
lalu salin file sesuai kebutuhan:
!cp "/content/drive/My Drive/xy.py" "xy.py"
konfirmasi bahwa file telah disalin:
sumber
Sebagian besar jawaban sebelumnya agak (Sangat) rumit,
from google.colab import drive drive.mount("/content/drive", force_remount=True)
Saya menemukan ini menjadi cara termudah dan tercepat untuk memasang google drive ke CO Lab , Anda dapat mengubah
mount directory location
ke apa pun yang Anda inginkan hanya dengan mengubah parameterdrive.mount
. Ini akan memberi Anda tautan untuk menerima izin dengan akun Anda dan kemudian Anda harus menyalin dan menempelkan kunci yang dihasilkan dan kemudian drive akan dipasang di jalur yang dipilih.force_remount
digunakan hanya ketika Anda harus memasang drive terlepas dari apakah itu dimuat sebelumnya. Anda dapat mengabaikan ini ketika parameter jika Anda tidak ingin memaksakan pemasanganEdit: Lihat ini untuk mengetahui lebih banyak cara melakukan
IO
operasi di colab https://colab.research.google.com/notebooks/io.ipynbsumber
Anda tidak dapat menyimpan file secara permanen di colab. Meskipun Anda dapat mengimpor file dari drive Anda dan setiap kali Anda selesai dengan file Anda dapat menyimpannya kembali.
Untuk memasang drive google ke sesi Colab Anda
from google.colab import drive drive.mount('/content/gdrive')
Anda cukup menulis ke Google Drive seperti yang Anda lakukan ke sistem file lokal. Sekarang jika Anda melihat Google Drive Anda akan dimuat di tab File. Sekarang Anda dapat mengakses file apa pun dari colab Anda, Anda dapat menulis serta membacanya. Perubahan akan dilakukan secara real time di drive Anda dan siapa pun yang memiliki tautan akses ke file Anda dapat melihat perubahan yang Anda buat dari colab Anda.
Contoh
with open('/content/gdrive/My Drive/filename.txt', 'w') as f: f.write('values')
sumber
Apa yang telah saya lakukan adalah yang pertama:
from google.colab import drive drive.mount('/content/drive/')
Kemudian
Setelah saya bisa misalnya membaca file csv dengan
df = pd.read_csv("data_example.csv")
Jika Anda memiliki lokasi yang berbeda untuk file, cukup tambahkan jalur yang benar setelah Drive Saya
sumber
Saya malas dan ingatan saya buruk, jadi saya memutuskan untuk membuat easycolab yang lebih mudah dihafal dan diketik :
import easycolab as ec ec.mount()
Pastikan untuk menginstalnya terlebih dahulu:
!pip install easycolab
The
mount()
Metode pada dasarnya menerapkan ini:from google.colab import drive drive.mount(‘/content/drive’) cd ‘/content/gdrive/My Drive/’
sumber
Anda cukup menggunakan cuplikan kode di sebelah kiri layar. masukkan deskripsi gambar di sini
Masukkan "Memasang Google Drive di VM Anda"
jalankan kode dan salin & tempel kode di URL
dan kemudian gunakan! ls untuk memeriksa direktori
untuk kebanyakan kasus, Anda akan menemukan apa yang Anda inginkan di direktori "/ gdrive / My drive"
maka Anda dapat melakukannya seperti ini:
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)
sumber
Saya menulis kelas yang mengunduh semua data ke '.' lokasi di server colab
Semuanya bisa ditarik dari sini 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)
sumber
Untuk mengekstrak zip Google Drive dari notebook colab Google misalnya:
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()
sumber
Untuk membaca semua file dalam folder:
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)
sumber
@bayu_joo
Saya berbicara tentang menyalin direktori dan semua subdirektorinya.
Bagi saya, saya menemukan solusi, yang terlihat seperti ini:
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)
Namun demikian, saya sepertinya gDrive tidak suka menyalin terlalu banyak file.
sumber
Ada banyak cara untuk membaca file di notebook colab Anda (**. Ipnb), beberapa di antaranya adalah:
Metode 1 dan 2 berhasil untuk saya , istirahat yang tidak dapat saya pahami. Jika ada yang bisa, seperti yang dicoba orang lain di posting di atas, silakan tulis jawaban yang elegan. Terima kasih sebelumnya.!
Metode pertama:
Saya tidak dapat memasang drive Google saya, jadi saya memasang pustaka ini
# 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}
Setelah proses instalasi & otorisasi selesai, Anda pertama-tama memasang drive Anda.
Setelah instalasi saya bisa me-mount google drive, semua yang ada di google drive Anda mulai dari / content / drive
Sekarang Anda cukup membaca file dari
path_to_your_folder
folder ke panda menggunakan jalur di atas.import pandas as pd df = pd.read_json('drive/ML/../../../../path_to_your_folder/file.json') df.head(5)
Metode kedua :
Yang nyaman, jika file Anda yang ingin Anda baca ada di direktori kerja saat ini.
Jika Anda perlu mengunggah file apa pun dari sistem file lokal Anda, Anda dapat menggunakan kode di bawah ini, jika tidak, hindari saja.!
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])))
misalkan Anda memiliki hierarki folder di bawah di drive google Anda:
Kemudian, Anda hanya perlu kode di bawah ini untuk memuat ke dalam panda.
import pandas as pd import io df = pd.read_json(io.StringIO(uploaded['file.json'].decode('utf-8'))) df
sumber
from google.colab import drive drive.mount('/content/drive')
Ini bekerja sempurna bagi saya, saya kemudian dapat menggunakan
os
perpustakaan untuk mengakses file saya seperti cara saya mengaksesnya di PC sayasumber
Pertimbangkan untuk mengunduh file dengan tautan permanen dan sudah
gdown
diinstal sebelumnya seperti di sinisumber