背景
Google Colaboratory は設定不要でPythonが使えるので、わたしは退屈なことをやらせる便利ツールとして使っています。ふと「Colaboratoryで生成したCSVファイルをGoogleチームドライブにダウンロードする」ってどうやるんだろうと疑問に思い、試行錯誤した結果、動いた方法です。
動いたコード
Colaboratoryのファイルはチームドライブのどこかにあって、この直前のコードセルでdfと名付けたpandasのDataFrameに何か表を格納しており、このdfの表をCSVファイルとしてチームドライブ の任意のフォルダにダウンロードしたい、という状況です。まず、「Google DriveをColaboratoryにマウントする」というおまじないをColaboratoryのコードセルに貼り付けて実行します。認証のためプロンプトが出てきますが、素直に指示に従います。
from google.colab import drive
drive.mount('/content/gdrive')
そして、チームドライブの中のフォルダ名、ファイル名を指定して、次のコードをコードセルに書いて実行します。ファイル名はここで初めて名付けています。フォルダは何階層かあっても大丈夫です。
with open('/content/gdrive/Team Drives/フォルダ名/ファイル名.csv', 'w', encoding = 'utf-8-sig') as f:
df.to_csv(f)
!cat /content/gdrive/Team\ Drives/フォルダ名/ファイル名.csv
これでおしまい。Googleチームドライブの指定したフォルダにデータフレームdfの内容を反映したcsvファイルが出来ました。「Google DriveをColaboratoryにマウントする」コマンドで、My Driveだけでなく、Team Driveもマウントされており、チームドライブに対してもシェルコマンドが使えるようになっていたのでした。
おまけ
いちいちファイル名を手書きするのは面倒なので、今日の日付をファイル名(result_YYYYMMDD.csv )につけて保存しています。
import datetime
now = datetime.datetime.now()
filename = "result_{0:%Y%m%d}.csv".format(now)
path = "/content/gdrive/Team Drives/フォルダ名/" + filename
with open(path, 'w', encoding = 'utf-8-sig') as f:
df.to_csv(f)
!cat /content/gdrive/Team\ Drives/フォルダ名/$filename
元ねた
2019年1月現在、ググってもColaboratoryで作成したCSVファイルをチームドライブにダウンロードするやり方を簡単に書いている記事は見当たらなくて、しばらくの間、頭を悩ませていました。Google公式Tutorialの"Mounting Google Drive locally"にテキストファイルを作成してMy Driveに格納する例があり、今回はそれを応用しました。そもそもこれダウンロードじゃないし、という突っ込みはあるかもしれないのですが、目的は達成できたし、誰かの時間を節約するのに役立つかもしれないと思い、ここにメモっておきます。