01 / 07
実行が終わると消えていた
ここまで作ってきた変数もリストも辞書も、共通の弱点があった。プログラムが終わると、中身が全部消えるということだよ。
買い物メモを作るプログラムを書いても、次に実行したときにはまっさらに戻っている。これでは「メモ」として使えないよね。
それを超える最初の手段がファイル。プログラムの外に文字を書き出しておけば、実行が終わっても残る。メモアプリも家計簿もゲームのセーブデータも、根っこはこれだよ。
ファイルを読み書きする
INPUT · スライド
01 / 07
ここまで作ってきた変数もリストも辞書も、共通の弱点があった。プログラムが終わると、中身が全部消えるということだよ。
買い物メモを作るプログラムを書いても、次に実行したときにはまっさらに戻っている。これでは「メモ」として使えないよね。
それを超える最初の手段がファイル。プログラムの外に文字を書き出しておけば、実行が終わっても残る。メモアプリも家計簿もゲームのセーブデータも、根っこはこれだよ。
02 / 07
ただし、この教材のファイル操作はブラウザの中に作った仮想の置き場で行う。あなたの端末の本物のファイルには一切触れないので、安心して試していいよ。
そのかわり、置き場は実行のたびに作り直される。だからこの章では、いつもまず自分で書き出してから読む。1回の実行の中で往復するんだ。
書き出すときは open に "w" を渡す。w は write(書く)の頭文字だよ。詳しい話は次のグループでやるので、いまは「読むための下ごしらえ」と思っておこう。
f = open("memo.txt", "w")f.write("あさ")f.close()print("かきだした")実行結果
かきだした
03 / 07
読むときの手順は3つだけ。
open("memo.txt") … ファイルを開く。モードを書かなければ「読む」になるf.read() … 中身をまるごと1つの文字列として受け取るf.close() … 閉じるread が返すのは文字列。だから変数に入れて、あとはいつもどおり扱えるよ。
f = open("memo.txt", "w")f.write("あさ")f.close()f = open("memo.txt")honbun = f.read()f.close()print(honbun)実行結果
あさ
04 / 07
なぜ閉じるのか。書いた内容は、閉じるまで置き場に届ききっていないことがあるからだよ。
下の例は f.close() を後回しにして、その間にもう一度開いて読んでいる。読めた文字数は 0。あとで閉じてから読み直すと、ちゃんと 2 文字ある。
閉じてはじめて完成すると覚えよう。
f = open("memo.txt", "w")f.write("あさ")f2 = open("memo.txt")print(len(f2.read()))f2.close()f.close()f3 = open("memo.txt")print(len(f3.read()))f3.close()実行結果
0 2
05 / 07
ファイルの中身に改行が入っていると、read で読んだ文字列の末尾にも改行が残る。そこに print がさらに改行を足すので、余計な空行が1行出るよ。
消したいときは2つのやり方がある。
print(honbun, end="") … print が足す改行をやめさせるprint(honbun.strip()) … 文字列の前後の空白と改行を落としてから渡すf = open("memo.txt", "w")f.write("あさ\nひる\n")f.close()f = open("memo.txt")honbun = f.read()f.close()print(honbun, end="")実行結果
あさ ひる
06 / 07
存在しないファイルを読もうとすると、Python は FileNotFoundError を出してそこで止まる。第4章で見たエラーの仲間だね。
名前を打ちまちがえたときにもこれが出る。「無いファイルは作られずにエラーになる」のが読みモードの決まりだよ。
f = open("arimasen.txt")print(f.read())実行結果
FileNotFoundError: [Errno 44] No such file or directory: 'arimasen.txt'
07 / 07
ファイルを読む流れはこうだった。
open で開くread で中身を文字列として受け取るclose で閉じるでも気づいたかな。close を書き忘れたら終わりなんだ。ここまでの例でも、開くたびに1行ずつ増えていった。行が増えるほど忘れやすくなるし、途中でエラーが起きたら close まで届かない。
次のレッスンでは、この閉じ忘れを構造的に起こらなくする書きかたを覚えるよ。