LEVEL 6 ・ ファイル / Lesson 11

テキストファイルを読む・書く

ファイルを開いて、中身を読み、書き込む。Pythonの「ファイルの扱い方」の基本です。

目安 15分 ・ インストール不要

このレッスンが終わったら

「with open(...) でファイルを開き、読んだり書いたりできる。w は上書きなので注意する」と言える。

STEP 1

できることを見る

メモ帳で作ったテキストファイルの中身を、Pythonに読んでもらいましょう。

ここに、members.txt というファイルがあります。部署のメンバーの名前が、1行に1人ずつ書かれています。

members.txtサンプルファイル
田中
佐藤
鈴木

Pythonでは、このファイルを次のように読みます。

with open("members.txt", encoding="utf-8") as f:
    text = f.read()
print(text)
STEP 2

動かしてみる

ファイルを読むサンプルファイル付き・書き換えOK
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

田中・佐藤・鈴木と、3人の名前が表示されましたか。ファイルの中身が、そのままPythonに入ってきました。

STEP 3

1行ずつ読む

open("members.txt", encoding="utf-8") を分解する
openファイルを開く
"members.txt"開きたいファイルの名前
encoding="utf-8"文字コード(日本語の読み方)
1行ずつ日本語にしてみる
with open("members.txt", encoding="utf-8") as f:members.txt を開いて、「f」と呼ぶ。(字下げの中で使い終わったら、自動で閉じる)
text = f.read()「f」の中身を全部読んで、「text」という名前で覚える
print(text)textを表示する

日本語にすると

members.txt を開いて、中身を全部読み、表示してください。使い終わったら、自動で閉じてください。

with を使うと、ファイルを閉じ忘れる心配がありません。ファイルを開いたままにすると、ほかのソフトで開けなくなることがあるため、いつも with を使うのが決まりです。

STEP 4

1か所だけ変える

① 1行ずつ読む。 f.read() の代わりに、for で1行ずつ取り出してみましょう。LEVEL 3 の繰り返しの考え方と同じです。

1行ずつ読むサンプルファイル付き・書き換えOK
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

line.strip() は、行の最後にある改行を取り除きます。.strip() を消して実行すると、行と行の間に空行が入ることを確かめてみましょう。ファイルの各行の最後には、見えない改行が付いているためです。

② ファイルに書く。 書き込むときは、open の2つ目に "w"(write = 書く)を指定します。

ファイルに書いて、読み戻すコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

\n は「改行」を表す記号です。write は、書いた文字をそのまま入れるので、改行したいときは自分で \n を付けます。

③ ファイルが無いとき。 存在しないファイルを開こうとすると、どうなるでしょう。

名前を間違えてみようサンプルファイル付き・書き換えOK
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

FileNotFoundError は、「そのファイルがありません」という意味でしたね(エラー講座)。名前の綴り(members.txt と member.txt)を見比べてみてください。

STEP 5

自分で書く

お題① members.txt を読んで、1人ずつ「〇〇さん」と表示してください。

お題①:さん付けで表示サンプルファイル付き・書き換えOK
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます
ヒントを見る

with open(...) as f: のあと、for line in f: で1行ずつ取り出し、print(line.strip() + "さん") と書きます。

答えの例を見る
with open("members.txt", encoding="utf-8") as f:
  for line in f:
      print(line.strip() + "さん")

お題② greeting.txt というファイルに「こんにちは」と書き込み、そのファイルを読み戻して表示してください。

お題②:書いて、読み戻すコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます
ヒントを見る

先に open("greeting.txt", "w", encoding="utf-8") で書き、次にもう一度 open("greeting.txt", encoding="utf-8") で読みます。

答えの例を見る
with open("greeting.txt", "w", encoding="utf-8") as f:
  f.write("こんにちは")

with open("greeting.txt", encoding="utf-8") as f:
  print(f.read())
STEP 6

仕事ならどう使う?