如何在 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,然後新增一個筆記本來試試看吧!
1. 掛載 Google Drive 到 Colab 的 虛擬機
下面的示例展示瞭如何使用授權碼在虛擬機中掛載 Google Drive,並在不再使用時卸載該遠端硬碟。
成功掛載之後,你可以像對代本地磁碟機一樣,利用 %
或 !
來呼叫 Linux 的系統指令,例如 cd
、ls
、mkdir
等檔案系統的操作,來管理 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 登錄服務進行身份驗證的網頁連結:
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
- 下載文件內容
- 更新文件內容
- 列出所有文件
在這裡我就不逐一列出全部的代碼範例,若你很感興趣請開啟在下方的參考連結瀏覽相關內容。
參考文件
- Google Colaboratory: Google Drive Snippets
- PyDrive’s documentation
- Google Drive API Reference | Google Developers
- 筆記 for Python (Google Colab + PyDrive) | Jacky Lu | Medium
如果你有任何問題,請在下方留言。你亦可透過 Facebook 專頁 與我交流和討論。