このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】テキストファイルの読み書き

テキストファイルの読み書き

 ここでは、Python を用いたテキストファイルの読み書きについて、with 文と open 関数を中心に詳しく解説します。ファイル入出力は、プログラムのデータ保存やログ記録など多くの用途に利用されます。with 文を使うことで、ファイルのオープンからクローズまでの処理を自動化でき、リソースの解放忘れを防ぐことができます。
 以下で、書き込みと読み込みそれぞれの操作について、構文やオプションの意味を表形式などを用いて丁寧に説明していきます。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.テキストファイルの書き込み

1.1. with 文と open 関数の基本構文

 テキストファイルにデータを書き込む際は、with 文を利用してファイルをオープンし、ブロック内で書き込み処理を実行します。with 文を使うと、ブロックの実行が終了した時点でファイルが自動的に閉じられるため、安全かつ効率的です。たとえば、以下のコードは "output.txt" というファイルに、複数の行を出力する例です。

with open("output.txt", "w", encoding="utf-8") as f:
    f.write("Good morning\n")
    f.write("Python File I/O\n")
    f.write("Practice makes perfect\n")

output.txtの内容

Good morning
Python File I/O
Practice makes perfect

【with 文の特徴】

項目説明
自動クローズブロック終了時にファイルが自動的に閉じられる。
インデントwith 文内のコードはインデントして記述し、ブロックを明示
可読性リソース管理がシンプルになり、コードの見通しが良くなる。

1.2. open 関数のパラメータとオプション

 open 関数はファイルを操作するための基本的な関数で、指定したファイルを開き、ファイルオブジェクトを返します。主なパラメータは以下の通りです。

【open 関数の主なパラメータ】

引数説明
ファイル名読み書きするファイルのパス。絶対パスまたは相対パスが利用可能。
モード'w':書き込み(既存ファイルは上書き)、 'r':読み込み(デフォルト)、 'a':追記書き込み
encodingテキストファイルの文字エンコーディング。例:'utf-8', 'shift_jis' など

 上記の例では、"w" モードを指定しているため、ファイルが存在しない場合は新規作成され、既存の場合は内容が上書きされます。また、encoding に "utf-8" を指定することで、UTF-8 エンコーディングでファイルが読み書きされます。

2.テキストファイルの読み込み

2.1. read() メソッドによる全体読み込み

 テキストファイルの内容をまとめて取得する場合は、read() メソッドを使用します。以下は、先ほど作成した "output.txt" を全体として読み込み、その内容を表示する例です。

with open("output.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

実行結果

Good morning
Python File I/O
Practice makes perfect

【read() メソッドの特徴】

メソッド説明
read()ファイル全体の内容を 1 つの文字列として返す。
改行保持改行コードもそのまま読み込むため、出力時に元の改行が保持される。

2.2. for 文による1行ずつの読み込みと enumerate の活用

 大きなファイルの場合や、行ごとに処理を行いたい場合は、ファイルオブジェクトをイテラブルとして for 文で1行ずつ処理する方法が有効です。さらに、enumerate 関数を組み合わせることで、各行に行番号を付けて表示することもできます。以下はそのサンプルコードです。

with open("output.txt", "r", encoding="utf-8") as f:
    for line_number, line in enumerate(f, start=1):
        print(f"{line_number}: {line}", end="")

【enumerate 関数のパラメータ】

パラメータ説明
iterable反復可能なオブジェクト(ここではファイルオブジェクト)
startカウント開始の番号(デフォルトは 0 ですが、ここでは 1 から開始)

 このコードでは、各行に対して行番号を付け、改行コードが既に含まれているため、print 関数の end 引数に空文字列を指定して余計な改行が追加されないようにしています。

まとめ

 ここでは、テキストファイルの書き込みと読み込みの基本操作について、with 文と open 関数を用いた方法を解説しました。with 文を使用することで、ファイル操作後のクローズ処理を自動化でき、open 関数のモードや encoding オプションにより、ファイルの作成、上書き、読み込みなど多彩な操作が可能です。
 また、read() メソッドや for 文を利用した行単位の読み込みにより、ファイルの内容を柔軟に扱うことができます。これらの基礎を理解することで、より複雑なファイル操作やデータ処理への応用が可能となります。