前回はtry-except文(https://augmented-vr.com/how-to-use-try-except/)について学習し、エラーでプログラムが止まらないようにする方法を学びました。しかし、これまでのプログラムは実行が終わると入力したデータが消えてしまいます。データをGoogleドライブにずっと残しておいて後から使いたい場合は「ファイルに保存する(書き込む)」処理が必要です。

今回は、Pythonでのファイルの読み書きの基本と、Google Colaboratory (Colab)ならではの「ファイルの保存場所」に関する重要な注意点を解説します。

Google Colaboratoryのファイルの仕組み

ファイルの読み書きをする前に、私たちが使っている「Google Colaboratory (Colab)」の少し特殊な仕組みについて解説します。

Colabの画面の左側に、フォルダのアイコン(ファイルタブ)があります。通常、Pythonでファイルを作るとここに保存されます。しかし、ここは仮の保存場所で、ただプログラムを書いてここにファイルを保存しても、一定時間が経過したり、ブラウザを閉じたりすると、保存したファイルはすべて自動的に消えてしまいます(揮発性といいます)。

せっかく保存したデータが勝手に消えてしまっては困りますよね。

Googleドライブを連携(マウント)する

データを消えずに残しておくためには、あなたの「Googleドライブ」とこのColabを繋ぐ必要があります。この繋ぐ作業のことを「マウント」と呼びます。これは自分のパソコンではなく、インターネット上のColabを使っているからこそ必要な特有の作業です。

マウントするには、コードセルで以下のコードを実行します。

# Googleドライブをcolabに接続(マウント)するための機能を入れる
from google.colab import drive

# 自分のGoogleドライブを /content/drive という場所にマウントする
drive.mount("/content/drive")

実行するとアクセス許可の画面が出るので、自分のGoogleアカウントを選んで許可してください。これで、ColabからあなたのGoogleドライブに直接ファイルを保存できるようになりました。

ファイルを読み書きする

Pythonでファイルを扱うには、open関数とwith文を組み合わせて使います。

  • open関数: ファイルを開くための機能です。括弧の中に「どのファイルを開くか(ファイルパス)」と「どういう目的で開くか(モード)」を指定します。
  • with文: インデントされたブロックの処理が終わった時に、自動的にファイルを安全に閉じてくれるとても便利な機能です。これを使わないと、使い終わったファイルを自分で閉じる命令を忘れずに書かなければならず、書き忘れるとデータが壊れるなどのエラーの原因になります。

使用するにはwith、open(“ファイルパス”, “モード”)、as、変数名、コロン「:」を使います。その一つ下の行にインデントをして、読み書きの処理のコードを書きます。なので例としてファイルの読み書きは、

with open("ファイルパス", "モード") as 変数名:
    コード

の形式で記述します。
この例ではインデントは半角スペース四つで行っています。統一しているならインデントは半角スペース二つなどでも構いません。
as 変数名の部分は、開いたファイルをPythonのプログラムの中でどういう名前で扱うか(例えばfileなど)を決めるためのものです。

では、実際にやってみましょう。
Google Colaboratoryを開いて新しいノートブックを作成し、先ほどのマウント作業を終わらせた後、ファイルに書き込み(w)をするプログラムを作ってみます。

# Googleドライブの「マイドライブ」の中に「memo.txt」を作るパスを指定
file_path = "/content/drive/MyDrive/memo.txt"

# ファイルを書き込みモード("w")で開く
with open(file_path, "w") as file:
  # ファイルに文字を書き込む(\n は改行の記号)
  file.write("Googleドライブへの保存テストです。\n")
  file.write("Googleドライブに保存しました!")

print("ファイルへの書き込みが終わりました。")

とセルに入力し実行してみましょう。すると結果は

ファイルへの書き込みが終わりました。

と表示されます。

プログラムの解説(書き込み)

  • 保存先の指定(2行目): 変数file_path にGoogleドライブの保存先の道筋(パス)を代入しています。
  • ファイルを開く(5行目): with open(file_path, “w”) as file: と書き、指定した場所のファイルを書き込みモード(“w”)で開き、それを変数fileとして扱う準備をしています。
  • 文字の書き込み(7~8行目): file.write() を使い、開いたファイルの中に指定した文字を順番に書き込んでいます。
  • ファイルを閉じて完了(10行目): with文のインデントが終わるとファイルは自動的に安全に閉じられ、十行目のprint関数で完了のメッセージを表示しています。実際にあなたのGoogleドライブを開いてみると、「memo.txt」というファイルができているはずです。

次に、いまGoogleドライブに書き込んだファイルの中身を読み込み(r)して表示してみましょう。

# 読み込むファイルのパスを指定
file_path = "/content/drive/MyDrive/memo.txt"

# ファイルを読み込みモード("r")で開く
with open(file_path, "r") as file:
  # ファイルの中身をすべて読みこんで変数に入れる
  content = file.read()

# 読み込んだ内容を表示する
print("読み込んだテキスト: ")
print(content)

とセルに入力して実行してみましょう。すると結果は

読み込んだテキスト:
Googleドライブへの保存テストです。
Googleドライブに保存しました!

のように表示されます。

プログラムの解説(読み込み)

  • 読み込み元の指定(2行目): 先ほどと同じファイルのパスを変数に代入しています。
  • ファイルを開く(5行目): with open(file_path, “r”) as file: と書き、今度はファイルを読み込みモード(“r”)で開いています。
  • 文字の読み込み(7行目): file.read() を使ってファイルの中身を全て読み取り、その結果を変数content に代入しています。
  • 結果の表示(10~11行目): 十行目と十一行目のprint関数で、変数contentに入っている読み込んだテキストを画面に表示させています。

リストや変数を使ったファイルの読み書き

今度は、以前学習した「リスト」を新しく定義して、その中身をファイルに保存してみましょう。

# 果物のリストを変数として定義する
favorite_fruits = ["もも", "なし", "かき"]

# 新しい保存先のパスを指定
list_file_path = "/content/drive/MyDrive/fruits.txt"

# ファイルを書き込みモード("w")で開く
with open(list_file_path, "w") as file:
  # for文を使って、リストの中身を順番に書き込む
  for fruit in favorite_fruits:
    file.write(fruit + "\n")

print("リストのデータをファイルに保存しました!")

とセルに入力して実行してみましょう。すると結果は

リストのデータをファイルに保存しました!

と表示されます。

プログラムの解説(リストの書き込み)

  • リストの定義(2行目): 変数favorite_fruits に果物の名前が入ったリストを代入しています。
  • 保存先の指定(5行目): 変数list_file_path に新しいファイルの保存先を代入しています。
  • ファイルを開く(8行目): with open(list_file_path, “w”) as file: と書き、書き込みモード(“w”)で開いています。
  • リストの書き込み(10~11行目): for文を使ってリストから果物の名前を一つずつ取り出し、file.write()で書き込んでいます。+ “\n” を付けることで、果物ごとに改行して保存されます。

そして、この保存したリストのファイルも読み込んで表示してみましょう。

# 読み込むファイルのパスを指定
list_file_path = "/content/drive/MyDrive/fruits.txt"

# ファイルを読み込みモード("r")で開く
with open(list_file_path, "r") as file:
  # ファイルの中身を全て読み込む
  saved_fruits = file.read()

# 読み込んだ内容を表示する
print("好きな果物: ")
print(saved_fruits)

とセルに入力して実行してみましょう。すると結果は

好きな果物:
もも
なし
かき

のように表示されます(プログラムの動きは先ほどの読み込みと同じ流れです)。

[ポイント]時間経過で接続が切れたらどうなる?

Colabはとても便利ですが、一定時間操作しなかったり、長時間経過したりすると自動的に接続が切れてしまいます(ランタイムの切断)。

接続が切れてしまった後に、いきなりファイルの読み書きのコード(セル)を実行すると、「ファイルが見つかりません」や「そんな変数は定義されていません」といったエラーになってしまいます。なぜなら、接続が切れるとマウントした状態がリセットされ、先ほど定義したリスト(favorite_fruits)や変数のデータもすべて消えてしまうからです。

もし接続が切れてエラーが出てしまったら、慌てずに以下の手順でやり直してください。

  1. 再度マウントを実行する: 一番上に書いた
    from google.colab import drive
    drive.mount(“/content/drive”)
    のセルをもう一度実行して、Googleドライブを繋ぎ直します。
  2. 変数やリストも定義し直す: 必要な変数やリストが書かれているセル(先ほどの favorite_fruits = … など)も、上から順番に再度実行してPythonに覚えさせ直します。

Colabを使っていて急にエラーが出るようになったら、「接続が切れてリセットされたのかな?」と疑い、上のセルから順に実行し直すようにしましょう。

まとめ

  • 保存場所の注意: Colabの標準のファイル保存場所は一時的なので、消したくないデータはGoogleドライブをマウントして保存する。
  • with open(): ファイルを安全に開閉するための構文。
  • 書き込みモード(“w”): ファイルに文字を書き込むときは”w”を指定し、.write() を使う。
  • 読み込みモード(“r”): ファイルの中身を読み込むときは”r”を指定し、.read() を使う。
  • 接続が切れた場合: マウントのコードや変数を定義したセルを再度実行し直す必要がある。

ファイルの読み書きを覚えれば、プログラムで計算した結果を保存したり、設定ファイルを読み込んだりできるようになります。ぜひ色々試してみてください。

open-in-colab

今回はこれで終了です。
今回のサンプルを用意したので、もし必要な場合は上の「Open in Colab」と書いてあるボタンをクリックしてください。なおそのままだと編集不可なので編集をしたい場合は「ドライブにコピー」をクリックしてコピーしてください。
なおGoogle ColaboratoryについてわからなかったらGoogleColaboratoryを使ってみよう_導入編をご覧ください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA