ファイルを読み書きする

INPUT · スライド

1行ずつ読む

01 / 07

丸ごとでは扱いにくい

read は中身をまるごと1つの文字列にして返す。短いメモならそれでいいけれど、行ごとに何かしたいときは困るよね。

「点数が書かれた行を全部足したい」「3文字以上の行だけ表示したい」。こういうときに欲しいのは、1行ずつ取り出す方法だよ。

02 / 07

ファイルは for で回せる

その方法が、拍子抜けするほど簡単なんだ。for gyou in f: と書くだけ。リストを回すのとまったく同じ形だよ。

ただし1つ注意がある。取り出される行には、末尾の改行が付いたまま来る。だから print すると空行が混ざるよ。

with open("memo.txt", "w") as f:    f.write("あさ\nひる\nよる\n")with open("memo.txt") as f:    for gyou in f:        print(gyou)

実行結果

あさ

ひる

よる

03 / 07

strip で改行を落とす

前のレッスンで使った strip を、1行ごとにかければいい。gyou.strip() と書くだけだよ。

ファイルを for で回すときは、strip をセットで書く。そう覚えてしまっていいくらい、よく出てくる組み合わせだよ。

with open("memo.txt", "w") as f:    f.write("あさ\nひる\nよる\n")with open("memo.txt") as f:    for gyou in f:        print(gyou.strip())

実行結果

あさ
ひる
よる

04 / 07

第2章の for が、そのまま効いた

いま書いたコードを、リストを回すコードと並べてみよう。in のうしろが違うだけで、あとは何も変わっていない。

これは偶然ではないよ。リストも、文字列も、辞書も、ファイルも、同じ for で回せるように Python が設計されているんだ。

「回せるもの」には共通の約束ごとがあって、for はその約束だけを頼りに動いている。その正体は第8章で明かす。いまは「同じ書きかたがあちこちで効く」と気づいておくだけで十分だよ。

kudamonos = ["りんご", "みかん"]for kudamono in kudamonos:    print(kudamono)with open("memo.txt", "w") as f:    f.write("りんご\nみかん\n")with open("memo.txt") as f:    for gyou in f:        print(gyou.strip())

実行結果

りんご
みかん
りんご
みかん

05 / 07

readlines でリストにする

もうひとつの読みかたが readlines。全部の行をリストにして返してくれるよ。

リストになるので、len で行数を数えたり、[0] で最初の行を取り出したりできる。ただし改行はやはり残っているので、表示するときは strip が要るよ。

with open("memo.txt", "w") as f:    f.write("あさ\nひる\nよる\n")with open("memo.txt") as f:    gyous = f.readlines()print(gyous)print(len(gyous))

実行結果

['あさ\n', 'ひる\n', 'よる\n']
3

06 / 07

for と readlines の使い分け

2つのやりかたは、こう選ぼう。

  • for gyou in f: … 1行読んでは処理し、また1行読む。どんなに大きなファイルでも軽い
  • f.readlines() … 全部の行をいっぺんにリストに載せる。行数を数えたい・あとから何度も見たいときに

迷ったら for でいい。何百万行のファイルを readlines で読むと、そのぶん全部がメモリに載ってしまうからね。

with open("memo.txt", "w") as f:    f.write("あさ\nひる\nよる\n")with open("memo.txt") as f:    gyous = f.readlines()print(f"{len(gyous)}ぎょう")

実行結果

3ぎょう

07 / 07

まとめ

1行ずつ読む方法は2つだった。

  • for gyou in f: で回す。gyou.strip() で改行を落とす
  • f.readlines() でリストにする

そして大事な気づきがもうひとつ。第2章で覚えた for が、そのままファイルに効いた。この「同じ書きかたが効く」感覚は、覚えておいてね。

ここまでで「読む」はひととおり。次のグループでは、いよいよ書くほうをきちんと扱うよ。"w" と "a" の違いや、うっかりファイルを空にしてしまう事故の話をするね。