1.はじめに
Google Colab で Google drive の公開ファイル (例えば、fastText日本語版の学習済みモデルとか) を使う場合は、PCに一旦ダウンロードしてから Google drive経由で使うのが一般的だと思います。
普通はこの方法で問題ないわけですが、場合によっては わざわざ別途手動でダウンロードせずに、Google Colab を先頭からポチポチするだけで動くコードにしたいと思ったりするわけです。
今回は、そのための良い方法をWebで見つけましたので、備忘録として残します。
2.サンプルコード
サンプル例は、fastText日本語版学習済みモデル です。URLをクリックすると、まずこの画面が現れます。
この画面で、赤枠のボタンを押すと、ダウンロード画面になります。
そうしたら、このダウンロード画面のURLを控えておきます。後は、以下のコードで、直接ダウンロード出来ます。
# Google drive からfastText日本語モデル(vector_neologd.zip)をダウンロードする
import requests
def download_file_from_google_drive(id, destination):
# ダウンロード画面のURL
URL = "https://drive.google.com/uc?id=0ByFQ96A4DgSPUm9wVWRLdm5qbmc&export=download"
session = requests.Session()
response = session.get(URL, params = { 'id' : id }, stream = True)
token = get_confirm_token(response)
if token:
params = { 'id' : id, 'confirm' : token }
response = session.get(URL, params = params, stream = True)
save_response_content(response, destination)
def get_confirm_token(response):
for key, value in response.cookies.items():
if key.startswith('download_warning'):
return value
return None
def save_response_content(response, destination):
CHUNK_SIZE = 32768
with open(destination, "wb") as f:
for chunk in response.iter_content(CHUNK_SIZE):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
if __name__ == "__main__":
file_id = 'TAKE ID FROM SHAREABLE LINK'
destination = './data/vector_neologd.zip' # 保存先パスの指定
download_file_from_google_drive(file_id, destination)
enjoy !
(参考)
Python: download files from google drive using url
<追記 2021.5.29>
少し前から、Colab にこのためのライブラリー gdown が組み込まれて簡単になったので、追記します。
例えば、
表示リンク: https://drive.google.com/file/d/1vcxH6JOtwh_-FoZ8SNXYlHF9qCi3YoDH/view
ダウンロードリンク: https://drive.google.com/u/1/uc?id=1vcxH6JOtwh_-FoZ8SNXYlHF9qCi3YoDH&export=download
のときは、
1vcxH6JOtwh_-FoZ8SNXYlHF9qCi3YoDH がidです。このとき、ダウンロードするファイルが、food_101.zip であれば、下記のコードでダウンロードできます。
import gdown
gdown.download('https://drive.google.com/uc?id=1vcxH6JOtwh_-FoZ8SNXYlHF9qCi3YoDH', 'food_101.zip', quiet=False)
! unzip food_101.zip
これだけです。超簡単になりました! colab はだんだんと使いやすくなっていますね。