ファイルを読み書きする

INPUT · スライド

ファイルに書き出す

01 / 07

書くときはモードを渡す

ここまでの open は読むだけだった。実は open にはモードという2つ目の引数があって、省略すると "r"(read・読みこみ)になっていたんだ。

書きたいときは "w"(write・書きこみ)を渡す。開いたら write で文字を書くよ。with を使えば抜けるときに勝手に閉じてくれるのは、読むときとまったく同じだね。

with open("memo.txt", "w") as f:    f.write("あさ")print("かきおわり")

実行結果

かきおわり

02 / 07

書いたら読み直せる

本当に書けたかは、もう一度開いて読めば分かる。書くときと読むときで、開き直すのがポイントだよ。

もうひとつ大事なこと。"w" は、その名前のファイルが無ければ新しく作る。"r" で無いファイルを開くと FileNotFoundError で止まったよね。ここがモードの大きなちがいだよ。

with open("memo.txt", "w") as f:    f.write("あさ")with open("memo.txt") as f:    nakami = f.read()print(nakami)

実行結果

あさ

03 / 07

w はまず空にする

ここがこの章でいちばん気をつけるところ。"w" で開いた瞬間に、すでにある中身は消える。

下の例では あさ がどこにも残っていない。あとから書いた よる だけになってしまった。

うっかり大事なファイルを "w" で開いて空にしてしまう事故は、経験者でもやるやつだよ。開く前に「このファイルは消えていいのか」と一度考える癖をつけよう。

with open("memo.txt", "w") as f:    f.write("あさ")with open("memo.txt", "w") as f:    f.write("よる")with open("memo.txt") as f:    nakami = f.read()print(nakami)

実行結果

よる

04 / 07

改行は自動ではつかない

print は行の終わりに改行を足してくれた。でも write は足さない。書いた文字がそのまま続けて並ぶよ。

だから2回に分けて書いても、読み直すと あさひる と1行にくっついてしまうんだ。

with open("memo.txt", "w") as f:    f.write("あさ")    f.write("ひる")with open("memo.txt") as f:    nakami = f.read()print(nakami)

実行結果

あさひる

05 / 07

改行は自分で書く

行を分けたいなら、自分で \n を書く。これだけで1行ずつのファイルになるよ。

読み直して print すると、下のように空行が1つ出る。ファイルの中身が改行で終わっていて、print がさらに改行を足すからだよ。おかしくはないので安心してね。

with open("memo.txt", "w") as f:    f.write("あさ\n")    f.write("ひる\n")with open("memo.txt") as f:    nakami = f.read()print(nakami)

実行結果

あさ
ひる

06 / 07

a なら消さずに足す

消さずに続きから書きたいときは "a"(append・追記)を使う。開いても中身は消えず、うしろに足されるよ。

モードは3つ覚えておけば足りる。

  • "r" … 読む(省略したときのモード)
  • "w" … 消してから書く
  • "a" … 消さずに足す
with open("nikki.txt", "w") as f:    f.write("1にちめ\n")with open("nikki.txt", "a") as f:    f.write("2にちめ\n")with open("nikki.txt") as f:    nakami = f.read()print(nakami)

実行結果

1にちめ
2にちめ

07 / 07

リストをまとめて書く

リストの中身をまとめて書く writelines もある。名前に lines(行)と入っているけれど、改行は足してくれないので、要素のほうに \n を入れておく必要があるよ。

これでプログラムの外に文字を残せるようになった。次は書いたものを読み戻して、往復させてみよう。

kudamonos = ["りんご\n", "みかん\n"]with open("kudamono.txt", "w") as f:    f.writelines(kudamonos)with open("kudamono.txt") as f:    nakami = f.read()print(nakami)

実行結果

りんご
みかん