ReleaseMind HK

如何在 Colab 存取 Google Drive 上的檔案 ─ 掛載及 PyDrive 教學

封面圖片(如何在 Colab 存取 Google Drive 上的檔案 ─ 掛載及 PyDrive 教學)

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,並在不再使用時卸載該遠端硬碟。

確認「Google Cloud for Desktop」是你信任的應用程式。 請複製這個代碼,然後切換到你的應用程式,再貼上這個代碼: <your verification code>
通過 Google 登錄服務,獲取 Google Drive 的存取權限

成功掛載之後,你可以像對代本地磁碟機一樣,利用 %! 來呼叫 Linux 的系統指令,例如 cdlsmkdir 等檔案系統的操作,來管理 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
  • 下載文件內容
  • 更新文件內容
  • 列出所有文件

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


參考文件


如果你有任何問題,請在下方留言。你可亦透過 Facebook 專頁 與我交流和討論。