如何在Colab存取Google Drive上的檔案

Chris K.Y. Fung
數碼文明推廣教室
7 min readJul 7, 2021

--

Colab + Google Drive

Google Colaboratory (簡稱為「Colab」) 可讓你在瀏覽器上以 Jupyter Notebook 的互動式介面,來撰寫及執行 Python。

開啟 Notebook 時,Colab 通過在 Google 雲端上建立 VM (虛擬機) 加載您的 .ipynb 檔案,而不會主動存取在個人電腦上的本地資源,即使編寫的程式存有錯誤或漏洞,亦不用擔心對你的主機造成損害。

採用 Colab 能避免諸多在 PC 上編程 Python 時可能發生的問題,如程式庫無法安裝及版本衝突引起的錯誤,十分適合學生和初學者作入門練習,以至供數據科學家同時分析及處理多個專案。

🔐 不過,在使用 Colab 時要注意虛擬機的生命週期。在您的瀏覽器或筆記本的分頁被關閉或者被閒置之後,當其執行階段逾時 (session timeout) 就會終止虛擬機,釋放 RAM 及磁碟等資源。

若您使用 Google Drive 來儲存 Notebook,會如同 Google Doc 和 Google Sheets 一般自動儲存變更,該筆記本內的程式片段及執行結果都會記錄至一個 .ipynb 檔案。

儘管如此,其他在 VM 磁碟上的文件(如上傳的資料檔,或匯出的圖片等)都只是暫存性質,若不另外將它們保存起來,在虛擬機終止之後將永久掉失那些關聯及衍生的檔案。在您上傳檔案至 Colab 時,會看到以下警告訊息:

請注意,當這個執行階段重新開啟時,上傳的檔案會遭到刪除。

👨‍💻 本文將讓您了解在 Colab 中調用 Google Drive 的兩大途徑:

  • 掛載 Google Drive 到 Colab 的 虛擬機
  • 使用 PyDrive 查看、下載、儲存檔案

🔰 您也開啟 Google Colab,然後新增一個筆記本來試試看吧!

Colab存取Google Drive範例.ipynb

1. 掛載 Google Drive 到 Colab 的 虛擬機

下面的示例展示瞭如何使用授權碼在虛擬機中掛載 Google Drive,並在不再使用時卸載該遠端硬碟。

🆗 成功掛載之後,您可以像對代本地磁碟機一樣,利用 %! 來呼叫 Linux 的系統指令,例如 cdlsmkdir 等檔案系統的操作,來管理 Google Drive 上的檔案和文件夾。

確認「Google Cloud for Desktop」是您信任的應用程式。
通過 Google 登錄服務,獲取 Google Drive 的存取權限

🚍 你也可以在筆記本執行 import os 來導入 Python OS 標準程式庫,撰寫 Python 代碼來操作、讀取及寫入在 /gdrive 路徑下的文件。

🧿 通過掛載的方式來連接 Google Drive,雖然是簡單易用,但是只能夠在 Colab 上運用,缺乏移植至其他主機或平台的兼容性。接下來,讓我們再來看看另一個做法,如何使用 PyDrive 來訪問 Google Drive。

2. 使用 PyDrive 查看、下載、儲存檔案

PyDrive 是 google-api-python-client 的封裝套件包,整合了常見的 Google Drive API 應用,利用簡單的函式就能呼叫 API 操作 Google Drive。

因為 PyDrive 是 Colab 上已預裝的 Python 套件包,所以不必通過 pip 來安裝,該套件也能夠於 Colab Notebook 上被導入使用。

在創建 PyDrive 客戶端時,須要透過 OAuth2 來進行用戶驗證。在 Colab 上運行以下程式碼片段,將導入 PyDrive 模組與相關套件,接著通過 Google 身份驗證獲取 Google Drive 的查看及編輯權限。

在完成之後,將宣告為 drive 在保存已成功連接的客戶端。

🔑 在初次運行程式碼片段之後,會顯示要求開啟 Google 登錄服務進行身份驗證的網頁連結:

Go to the following link in your browser: https://account.google.com/o/oauth2/… Enter verification code: ___
使用 Google 帳戶登入
確認「Google Cloud SDK」是您信任的應用程式。
請複製這個代碼,然後切換到您的應用程式,再貼上這個代碼: <your verification code>
通過 Google 登錄服務,獲取 Google Drive 的存取權限

2a. 創建文字檔案 ➕

在取得連接至 Google Drive 的客戶端之後,您可以嘗試通過 PyDrive 建立一個文字檔案。在筆記本裡運行以下的程式片段,將在雲端硬碟的根目錄新增一個內容為「 Hello World! 」的 Hello.txt 檔案。

2b. 上傳本地檔案 🔼

除了寫入文字內容,您亦可以嘗試通過 PyDrive 將本地檔案上傳至 Google Drive。假設您在 Colab 繪製了一張圖表,並輸出到虛擬機的本地磁碟,利用以下的程式片段,就能將圖片檔案上傳,在雲端硬碟上建立一個檔案副本。

2c. 將檔案建立至指定的雲端文件夾 📥

上述的兩個示範,都是將檔案存放至雲端硬碟的根目錄中。若想將檔案建立至其他路徑,則須如以下的範例在呼叫 CreateFile() 時,將 雲端文件夾 ID 編匯至其引數之中:

2d. 將檔案移動至目標文件夾 📁

您亦可以嘗試利用 PyDrive 將已上傳的檔案移動至指定的雲端文件夾。只要通過指派新的 雲端文件夾 ID 來取代該檔案 metadata 中的 parents 屬性,如以下的程式片段:

📌 您還能夠使用 PyDrive 來呼叫以下的 Google Drive 操作:

  • 將文件丟至垃圾桶、從垃圾桶還原,以及永久刪除
  • 更新文件的 Metadata
  • 下載文件內容
  • 更新文件內容
  • 列出所有文件

在這裡我就不逐一列出全部的代碼範例,若您很感興趣請開啟在下方的參考連結瀏覽相關內容。

本文亦同時發佈於本人之部將格 ReleaseMind ( hk.releasemind.com ) ⛳

如果您喜歡這篇文章,請為此文章 👏 👏 👏 👏 👏 👏 👏,並分享至你的 Facebook 及 Twitter。

假如您有任何疑問或建議,歡迎標註留言或透過 Facebook 專頁 聯繫我 🙂

--

--

Chris K.Y. Fung
數碼文明推廣教室

📝集中分享提升生產力、自動化至開發等技能📢📈 博客及開發人員,於香港理工大學MPhil畢業,並多年在大學從事學術研究,喜歡學習多元化知識和技術。歡迎訂閱・標註回應,共享交流啟發性話題🐱‍🏍 about.me/chriskyfungfb.com/chriskyfung 😪📘