クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

Pythonのファイル操作とエラー処理

このレッスンのあとで: ファイルの行を読み、読めない行があっても止まらずに集計することができる。

65分のレッスンコマンド9件毎日使う Linux コマンドのラボ:エンジニアが暗記している30のコマンド

ファイルを読んで、間違いに負けない

Python では、テキストファイルを開いて行ごとに読み、結果を別のファイルに書けます。読めない行があってもプログラムが止まらないように、try と except でエラーを受け止められます。

点数が並んだファイルに、打ち間違いの行が1つ混ざっていると、集計は止まってしまいます。止まらずに数える方法を学びます。

このレッスンのゴール

メモ

ファイルの行を読み、読めない行があっても止まらずに集計することができる。

キーワード

ことばいみれい
openファイルを開く関数open("scores.txt")
with使い終わったファイルを、自動で閉じる書き方
strip文字列の前後の空白と改行を取り除く
例外プログラムの実行中に起きるエラーValueError
tryエラーが起きるかもしれない処理を囲む
exceptエラーが起きたときの処理を書く

学生が入力するセルは、このプレビューでは空白です。

open と with でファイルを読む

with open("scores.txt") as f: と書くと、ファイルが開き、下げた行の間だけ使えます。終わると自動で閉じます。

for line in f: で、1行ずつ読めます。各行の終わりには改行がついているので、line.strip() で取り除きます。

点数のファイルを作る

コマンド
printf '80\n65\nabc\n90\n' > scores.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

中身を確かめる

コマンド
cat scores.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

読むプログラムを書き出す

コマンド
printf 'with open("scores.txt") as f:\n    for line in f:\n        print(line.strip())\n' > read.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

実行して、同じ4行が出るか見る

コマンド
python3 read.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

strip と split で1行を分ける

「Aki,80」のように、カンマで区切った行は、line.strip().split(",") で2つに分けられます。結果は ["Aki", "80"] のリストです。

点数の "80" は文字列なので、計算するには int() で整数に直します。

1行を名前と点数に分ける

コード: python
# 「名前,点数」の形の行を、2つに分けます。
lines = ["Aki,80\n", "Ben,65\n", "Chi,90\n"]

for line in lines:
    parts = line.strip().split(",")
    name = parts[0]
    score = int(parts[1])
    print(name, "さん:", score + 5, "点(5点加点)")
# 加点を 10 点に変えて、もう一度実行しましょう。

"w" で開くとファイルに書ける

open("out.txt", "w") で開くと、ファイルに書き込めます。f.write("hello\n") で1行書きます。

"w" で開くと、すでにあるファイルの中身は消えて、新しく作り直されます。大事なファイルの名前は、使わないでください。

ファイルに1行書く

コマンド
python3 -c "with open('out.txt', 'w') as f: f.write('hello\n')"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

書いた中身を確かめる

コマンド
cat out.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

try と except でエラーを受け止める

int("abc") のように、直せない値を直そうとすると、例外が起きて、プログラムが止まります。

try: の下に危ない処理を書き、except ValueError: の下に、エラーのときの処理を書きます。エラーが起きても、プログラムは次へ進みます。

わざとエラーを起こす

コマンド
python3 -c "print(int('abc'))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

エラーを受け止めるプログラムを書く

コマンド
printf 'for text in ["80", "abc", "90"]:\n    try:\n        print(int(text) + 1)\n    except ValueError:\n        print("bad:", text)\n' > try.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

実行して、止まらないことを確かめる

コマンド
python3 try.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

「try で囲んで、except だけ書けば、どんなエラーも消せる」と考える人がいます。名前をつけずに受け止めると、自分の書き間違いまで隠れてしまいます。起こりそうなエラーの名前を、except ValueError: のように指定しましょう。

このラボとソースについて: 毎日使う Linux コマンドのラボ:エンジニアが暗記している30のコマンド

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。