レッスン7:ファイル入出力

このレッスンでは、Pythonでのファイル入出力(I/O)について学習します。ファイルI/Oは、プログラムが外部のファイルとやり取りするための基本的な機能です。これにより、テキストファイルやCSV、画像、その他の形式のファイルを読み書きすることが可能になります。 PythonのファイルI/Oには主に以下の3つのステップがあります:

  1. ファイルを開く - open()関数を使用してファイルを開きます。この関数はファイル名とモード(読み取り、書き込み、追加など)を引数に取ります。

  2. ファイルを読み書きする - read()write()readline()などのメソッドを使用してファイルを読み書きします。

  3. ファイルを閉じる - close()メソッドを使用してファイルを閉じます。ファイルを閉じることは、メモリを解放し、他のプログラムがそのファイルを使用できるようにするために重要です。 これらの基本的なステップを通じて、PythonでファイルIOを行う方法を学びます。

注:ローカルなコンピュータとGoogle Colabでは環境が異なるため、最初の3つのセクションでは、書かれたコードは敢えて実行できないようになっています。4番目の「Google ColabでのファイルI/O」からはコードが実行できるようになっていますが、ファイルがない場合にはエラーが表示されます。

ファイルを開く

Pythonでファイルを開くには、open()関数を使用します。この関数は、ファイル名とモードを引数に取ります。モードは以下のようなものがあります:

  • 'r' - 読み取りモード(デフォルト)

  • 'w' - 書き込みモード(既存のファイルは削除されます)

  • 'a' - 追記モード(ファイルが存在しない場合は新規作成します)

  • 'x' - 排他的作成モード(ファイルが存在しない場合のみ新規作成します) また、モードには以下の修飾子を追加することもできます:

  • 'b' - バイナリモード

  • 't' - テキストモード(デフォルト) 例えば、テキストファイルを読み取りモードで開くには以下のようにします:

f = open('myfile.txt', 'r')

このコードは、’myfile.txt’という名前のファイルを読み取りモードで開きます。ファイルオブジェクトは変数fに格納されます。

ファイルを読み書きする

ファイルオブジェクトが作成されたら、そのメソッドを使用してファイルを読み書きすることができます。以下に、最も一般的に使用されるいくつかのメソッドを示します:

  • read(size) - ファイルから最大sizeバイトを読み取ります。sizeが指定されていない場合、または負の数が指定されている場合、ファイルの残り全体を読み取ります。

  • readline() - ファイルから1行を読み取ります。

  • write(string) - ファイルにstringを書き込みます。戻り値は書き込まれた文字数です。 以下に、ファイルを読み取る例を示します:

f = open('myfile.txt', 'r')
print(f.read())
f.close()

このコードは、’myfile.txt’という名前のファイルを開き、その内容を読み取り、結果を表示します。最後に、close()メソッドを使用してファイルを閉じます。

ファイルを閉じる

ファイルを開いた後は、必ず最後にそれを閉じる必要があります。これは、close()メソッドを使用して行います。ファイルを閉じることは重要で、これにより未保存の変更が書き込まれ、メモリが解放されます。また、他のプログラムやスクリプトがそのファイルを使用できるようになります。

f = open('myfile.txt', 'r')
print(f.read())
f.close()

このコードは、’myfile.txt’という名前のファイルを開き、その内容を読み取り、結果を表示します。そして、close()メソッドを使用してファイルを閉じます。 ファイルを閉じることを忘れると、データの損失やバグの原因となる可能性があります。そのため、Pythonではwithステートメントを使用してファイルを安全に扱うことが推奨されています。withステートメントを使用すると、ブロックの実行が終了した時点でファイルが自動的に閉じられます。

with open('myfile.txt', 'r') as f:
    print(f.read())

このコードは、’myfile.txt’という名前のファイルを開き、その内容を読み取り、結果を表示します。withステートメントのブロックが終了すると、ファイルは自動的に閉じられます。

Google ColabでのファイルIO

Google Colabでは、ローカルファイルシステムへのアクセスが制限されています。そのため、ファイルIOを行うためには特別な手順が必要です。

Google Colabでは、Google Driveをファイルストレージとして使用することが一般的です。Google Driveをマウントすると、Google Driveのファイルに直接アクセスできるようになります。

以下に、Google Driveをマウントし、Google Drive上のファイルを読み書きするための基本的な手順を示します。

from google.colab import drive
drive.mount('/content/drive')
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-d5df0069828e> in <module>
----> 1 from google.colab import drive
      2 drive.mount('/content/drive')

ModuleNotFoundError: No module named 'google'

上記のコードを実行すると、Googleアカウントへのログインを求めるプロンプトが表示されます。ログインし、必要に応じて認証コードをコピーしてColabに貼り付けると、Google Driveがマウントされます。

Google Driveがマウントされると、/content/drive/My Drive/からGoogle Driveのファイルにアクセスできます。以下に、Google Drive上のテキストファイルを開き、読み取る例を示します。

with open('/content/drive/My Drive/myfile.txt', 'r') as f
  print(f.read())

このコードは、Google Drive上のmyfile.txtという名前のファイルを開き、その内容を読み取り、結果を表示します。myfile.txtがない場合はエラーになります。

また、Google Colabでは、以下のようにしてローカルファイルシステムからファイルをアップロードすることもできます。

from google.colab import files
uploaded = files.upload()

このコードを実行すると、ファイル選択ダイアログが表示されます。アップロードしたいファイルを選択すると、そのファイルは**Google DriveではなくColabのランタイム環境(このノートブックを実行するために用意された、一時的な環境)にアップロードされます。**アップロードされたファイルは、次のようにして開くことができます。

with open('myfile.txt', 'r') as f:
    print(f.read())

このコードは、先ほどアップロードしたmyfile.txtという名前のファイルを開き、その内容を読み取り、結果を表示します。

注:今回ファイルは一時的な環境にアップロードされたため、**このノートブックを閉じたり長い時間操作しないでいるとランタイムとの接続が切れ、アップロードしたファイルも消失します。**必ずローカルにコピーを残すようにしてください。

以上が、Pythonでの基本的なファイルI/Oと、Google ColabでのファイルI/Oの方法です。これらの知識を使って、Pythonプログラムでファイルを効率的に読み書きすることができます。

演習問題

  1. ランタイム環境でもGoogle Driveでも良いので、テキストファイル(exercise1.txt)を作成し、その中に以下の3行のテキストを書き込んでください(ファイルの書き込み方が分からない場合は、ChatGPTに聞いてみましょう)

Hello, World!
Python is fun.
Let's learn file IO.
  1. 問題1で作成したファイルを開き、その内容を読み取り、表示してください。

  2. 問題1で作成したファイルの末尾に以下のテキストを追加してください。

This is the end of the file.

その後、ファイルの内容を再度読み取り、表示してください。

# 演習問題
# 以下にコードを書いてみましょう