google colab で google driveを使う
pythonの開発環境としてgoogle colabを使うことにした。
google colabはgoogle提供の無料で使えるpythonの実行環境で、
gpuが使える、jupyter notebookのように色々メモしながら開発できるなどとても魅力的。
TPUという機械学習特化の計算リソースも設定一つで使えるようだ。
試しに色々コードを書いてしばらくすると、/conent(作業dir)においていたファイルが消えている...!!
ブラウザのセッションが切れると、pythonの変数はもちろん作業dirの中身も消えるようだ。
ソース実行に必要なファイルなど、消えて欲しくないものはgoogle driveに保存しておくのが良さそう。
google colabからgoogle driveを簡単にマウントすることができる。
google colab から google driveのファイル読み書き
# google colab try_google_drive.ipynb from google.colab import drive drive.mount('/content/gdrive') # google drive内のファイル読み込み with open("gdrive/My Drive/upload_file_1.txt", "r") as f: a = f.read() # google drive内のファイル書き込み with open("gdrive/My Drive/upload_file_1.txt", "a") as f: f.write("hoge fuga") print(a)
作業dirの/content以下にgdriveでmountされる。
ブラウザからあらかじめgoogle driveにアップしておき、colab内で読み書きする分には普通のファイルと同じように使える。
ただし、ファイル作成、directory作成は一手間必要。
colabからgoogle driveのファイル・ディレクトリ作成(ファイルupload)
ファイルの作成は作業dirのファイルをgoogle driveにuploadすることで実行する。
!pip install -U -q PyDrive # colabでpip install実行するコマンド # google drive 認証 from pydrive.auth import GoogleAuth from pydrive.drive import GoogleDrive from google.colab import auth from oauth2client.client import GoogleCredentials auth.authenticate_user() gauth = GoogleAuth() gauth.credentials = GoogleCredentials.get_application_default() drive = GoogleDrive(gauth) ##### colab上にlinkが表示され、認証するように促される ##### ##### 認証したらauth用のコードをコピペする ##### # 作業dirで作ったファイルをupload with open("upload_file_1.txt", "w") as f: f.write("output string 1") file = drive.CreateFile() file.SetContentFile("upload_file_1.txt") file.Upload() # directory作成 folder_name = 'DirTest' folder_metadata = {'title' : folder_name, 'mimeType' : 'application/vnd.google-apps.folder'} folder = drive.CreateFile(folder_metadata) folder.Upload() # 作成したdirectoryにファイルをupload foldertitle = folder['title'] folderid = folder['id'] print('title: %s, id: %s' % (foldertitle, folderid)) #Upload file to folder file = drive.CreateFile({"parents": [{"kind": "drive#fileLink", "id": folderid}]}) file.SetContentFile("upload_file_1.txt") file.Upload()
そのうち簡単にできるようになるかな...?