3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AI系のデータなど、数GBのファイルをGoogleDriveから落とすときはpydrive2使う。 + pydrive2の即時な設定

Posted at

AI関連のファイルで数GBのものがあった(BERT)。colabで学習させてGoogleDriveに結果保存していたものをGoogleDriveからローカルやサーバーにダウンロードしたい。pydrive使おうとしたがコケた。

結論

pydriveではなくpydrive2使う。でかいファイルがダウンロードできる

内容

ダウンロードファイルがでかすぎてpydriveではコケる。pydrive2では行ける
内部で使っているメソッドが変わっているらしい
githubにisssueたっててpydrive2使えって案内されていた。
GoogleDriveからのダウンロードは使い捨てプログラムなのでStackOverflowなどを見ながら地道にAPI叩いても良いのだとおもう。
でも私はさらにライブラリ使って楽をしたかった。

他、設定

任意の場所にダウンロードプログラムがあってpydrive2の設定ファイルも持ちたくないとき下記で設定色々行ける

# client_secretsの場所
GoogleAuth.DEFAULT_SETTINGS['client_config_file'] = os.path.dirname(os.path.abspath(__file__)) + '/resources/client_secrets.json'
# 認証情報をファイルに保存する設定
GoogleAuth.DEFAULT_SETTINGS['save_credentials'] = True
GoogleAuth.DEFAULT_SETTINGS['save_credentials_backend'] = 'file'
# credentialsファイルの保存先
GoogleAuth.DEFAULT_SETTINGS['save_credentials_file'] = os.path.dirname(os.path.abspath(__file__)) + '/resources/' + 'saved_credentials.json'
GoogleAuth.DEFAULT_SETTINGS['get_refresh_token'] = True

任意の場所のclient_secretsを使い、credentialsを任意の場所に保存する

pydrive2でフォルダーまるごとGoogleDriveからダウンロードしてくる全コード

どこからかあつめてきたコードをまとめて載せます

import os
from pydrive2.drive import GoogleDrive
from pydrive2.auth import GoogleAuth
GoogleAuth.DEFAULT_SETTINGS['client_config_file'] = os.path.dirname(
    os.path.abspath(__file__)) + '/resources/client_secrets.json'
# 認証情報をファイルに保存する設定
GoogleAuth.DEFAULT_SETTINGS['save_credentials'] = True
GoogleAuth.DEFAULT_SETTINGS['save_credentials_backend'] = 'file'
GoogleAuth.DEFAULT_SETTINGS['save_credentials_file'] = os.path.dirname(
    os.path.abspath(__file__)) + '/resources/' + 'saved_credentials.json'
# 認証情報(credentials)を自動で更新する設定
GoogleAuth.DEFAULT_SETTINGS['get_refresh_token'] = True

os.chdir(os.path.dirname(os.path.abspath(__file__)))

gauth = GoogleAuth()
gauth.CommandLineAuth()

drive = GoogleDrive(gauth)


def download_recursively(save_folder, drive_folder_id):
    # 保存先フォルダがなければ作成
    if not os.path.exists(save_folder):
        os.makedirs(save_folder)

    max_results = 100
    query = "'{}' in parents and trashed=false".format(drive_folder_id)

    for file_list in drive.ListFile({'q': query, 'maxResults': max_results}):
        for file in file_list:
            print(file)
            # mimeTypeでフォルダか判別
            if file['mimeType'] == 'application/vnd.google-apps.folder':
                download_recursively(os.path.join(save_folder, file['title']), file['id'])
            else:
                file.GetContentFile(os.path.join(save_folder, file['title']))


if __name__ == '__main__':
    # lang model
    drive_folder_id = '1-4dxxxxxx'
    save_folder = '../Folder/a'
    download_recursively(save_folder, drive_folder_id)
    # wiki
    drive_folder_id = '19xxxxxxxxxx'
    save_folder = '../Folder/b'
    download_recursively(save_folder, drive_folder_id)
    # label_id
    drive_folder_id = '1aVSxxxxxxxx'
    save_folder = '../Folder/c'
    download_recursively(save_folder, drive_folder_id)

以上です。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?