Python – Colab + gspread – 快速與google Sheet連結

簡介

由於上次有分享過一個與Google sheet連結比較冗長的版本,要先到Google API做一些設定,還要到程式中做一些設定,很抱歉分享這麼冗長的一篇,但是可以使用是最重要的。這次想介紹一下速度更快、更易懂得方式,並結合Google Colab可以加速該工作流程。

Jerry也有分享過一個與Sheet連結的套件,pygsheets,其實跟gspread,很相似,結構也很類似,假如有機會來嘗試一下該套件。

寫入資料

套件安裝: 首先我們來學習一下透過colab+gspread來寫入資料,一開始當然又是安裝套件。

!pip install --upgrade gspread

啟用權限: 再來我們可以選擇透過程式來創建一個sheet或是連結到你已經有的sheet,先講講使用程式來創建。

import gspread
from oauth2client.client import GoogleCredentials
#認證使用者
gc = gspread.authorize(GoogleCredentials.get_application_default())
#透過程式創建新sheet
sh = gc.create('A new spreadsheet')

我們必須先import剛剛安裝好的gspread套件,並且在這篇所介紹的設定動作,透過兩行程式就可以解決,如上述第二行與第四行這兩行。

當我們執行程式時,下方執行結果會跳出此訊息,請先點選連結。

點選之後會跳出選擇帳戶激活的自動設定,選好後將授權碼複製到上一段落空格中並按下Enter就算激活成功了。

創立or連結: 接著要介紹創建新的sheet與你已經透過手動方式在你的google drive創立了一個sheet,第二行是透過程式來新增,並把sheet名稱key在括弧中。

#create new
sh = gc.create('A new spreadsheet')

#open by key
#sht1 = gc.open_by_key('1ei-IYYvlViuhI6vcH4o_WnGyLQDOLsG_p0xRV7mw48A').sheet1
#sht2 = gc.open_by_url('https://docs.google.com/spreadsheet/ccc?key=0Bm...FE&hl')

但我比較不建議透過此方法,因為該方法所新增的sheet會出現在你的google drive最上層,我目前還沒有找到進入資料夾在新增的方法,所以我推薦透過「sheet key」或是透過「sheet url」來連結,如上方程式碼第五與六行。

塞入資料: 最後我們當然要把資料塞到sheet裡面,在上一段落我們選用「open by key」的方式,所以就選擇該選擇後的容器「sht1」來寫入,這邊最基本的寫入方式就是「update_cell」並透過「range」來選定寫入欄位。而隱藏起來的程式碼式最基本的單筆輸入方式。

cell_list = sht1.range('A1:C2')

import random
for cell in cell_list:
  cell.value = random.randint(1, 10)

sht1.update_cells(cell_list)
#sht1.update_cell(1,1,"測試")
#sht1.update('B1', '測試')
#sht1.update('A1:B2', [[1, 2], [3, 4]])

其他好用的功能

這個段落我來記錄分享一下該套件中好用且也會蠻常用到的程式寫法:

找尋欄位:

cell = sht1.find("測試")
cell = sht1.findall("6")
print(cell)
print("Found something at R%sC%s" % (cell.row, cell.col))

透過「find」找尋第一筆相符合的資料欄為,「findall」找尋所有的相符合的資料欄位。

分享sheet:

sht1.share('otto@example.com', perm_type='user', role='writer')

我們也可以透過程式碼來分享sheet,並透過參數的改變來修改分享的權限,上圖是參數的介紹。

儲存格動作:

#清除
sht1.clear()
#刪除欄位
sht1.delete_columns(1,2)
sht1.delete_rows(1,1)
#新增欄位(難用)
sht1.add_cols(1)
sht1.add_rows(1)
#新增欄位(堪用)
sht1.append_row(["A"]) 
#重設
sht1.resize(10,10)
#合併儲存格
sht1.merge_cells('A2:A5')

這邊我測試過幾個對sheet非常常用的動作,新增、刪除、清除、重設、合併欄位的動作,如上面程式碼,大家可以依照註解去選用之。

小結

當我學習到透過colab與gspread快速應用方法後,在撰寫爬蟲程式要儲存資料的流程可以更為加速,雖然不知道轉移到Atom是否一樣順利,但是起碼一條路是開通的,而除了將資料儲存在google sheet裡面,也可以使用SQL server來儲存資料,但我們先快速打通,得知可行之後再來做後續的優化。這邊附上「gspread文件檔案給大家查詢」。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *