Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
生徒
「先生、Pythonでファイルを開いて中身を読む方法はわかったんですけど、長い文章を1行ずつ読むことってできますか?」
先生
「もちろんできますよ。Pythonにはreadline()とreadlines()という便利な関数があって、1行ずつテキストファイルを読み取ることができるんです。」
生徒
「どんな違いがあるんですか?どっちを使えばいいんでしょう?」
先生
「では、実際に例を見ながら、どのように使い分けるのかを詳しく学んでいきましょう!」
1. readline()とは?1行ずつ読み込む基本の関数
readline()は、ファイルを1行ずつ順番に読み取る関数です。たとえば、小説のように長い文章が何行にも分かれている場合に、1行ずつ処理したいときに使います。
たとえるなら、「ノートを1ページずつめくって読む」ようなイメージです。
with open("sample.txt", "r") as f:
line = f.readline()
while line:
print(line.strip())
line = f.readline()
このコードでは、while文でファイルの終わりまで1行ずつ読み取ります。strip()は、行の末尾にある改行文字(「\n」)を取り除くための関数です。
たとえば、sample.txtに以下のような内容があったとします。
りんご
みかん
ぶどう
このプログラムを実行すると、次のように1行ずつ出力されます。
りんご
みかん
ぶどう
このようにreadline()を使えば、順番に1行ずつ読みながら処理を行うことができます。
2. readlines()とは?すべての行を一度に読み込む方法
次に紹介するのがreadlines()です。これは、ファイルの全ての行を一度に読み込み、リスト(list)として返す関数です。
たとえば、readlines()で同じファイルを読み取ると、こんなふうに使えます。
with open("sample.txt", "r") as f:
lines = f.readlines()
for line in lines:
print(line.strip())
readlines()は一気にすべての行をリストにするので、あとからまとめて処理するのに向いています。
出力結果は、先ほどと同じになります。
りんご
みかん
ぶどう
実際にPythonの内部では、次のようにリストとしてデータを扱っています。
["りんご\n", "みかん\n", "ぶどう\n"]
このように、各行の末尾には改行文字「\n」が含まれているため、出力の際にstrip()で取り除くのがポイントです。
3. readline()とreadlines()の違いを整理しよう
ここで、readline()とreadlines()の違いをまとめてみましょう。
| 関数名 | 特徴 | 使いどころ |
|---|---|---|
readline() |
1行ずつ読み込む。大きなファイルでもメモリに優しい。 | 大量のデータを少しずつ処理したいとき。 |
readlines() |
すべての行を一度にリストとして読み込む。 | 小さなファイルをまとめて処理したいとき。 |
つまり、ファイルが大きくて全部を一気に読み込むとメモリが足りなくなりそうな場合はreadline()を使い、内容が少なくてすぐに全部読み込める場合はreadlines()が便利です。
4. for文を使ってもっとシンプルに書く方法
実は、Pythonではファイルオブジェクト自体をfor文で回すことができます。これにより、readline()を使わなくても1行ずつ自動で読み取れます。
with open("sample.txt", "r") as f:
for line in f:
print(line.strip())
この書き方はPythonらしいシンプルな書き方で、多くの現場で使われています。with open()のブロックを抜けると自動的にファイルが閉じられるので、初心者でも安全に扱えます。
5. ファイルの行数を数える方法
ファイルを1行ずつ読みながら、何行あるかを数えることもできます。たとえば、次のように書くと、行数をカウントできます。
count = 0
with open("sample.txt", "r") as f:
for line in f:
count += 1
print("ファイルの行数は", count, "行です。")
もしsample.txtに3行のデータがあれば、実行結果はこうなります。
ファイルの行数は 3 行です。
このようにfor文と組み合わせることで、readline()やreadlines()を使わなくても柔軟に処理できます。
6. 文字コードに注意しよう(UTF-8 / Shift-JISなど)
日本語のファイルを開くときに、文字化けが起きることがあります。これは、ファイルの文字コード(文字を数字に変換して保存するルール)が原因です。
多くの日本語ファイルは「Shift-JIS」や「UTF-8」という形式で保存されています。Pythonで文字化けを防ぐには、encodingを指定して開くようにします。
with open("sample.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip())
もし「UnicodeDecodeError」というエラーが出た場合は、次のようにしてみましょう。
with open("sample.txt", "r", encoding="shift_jis") as f:
for line in f:
print(line.strip())
ファイルの文字コードがわからないときは、まずutf-8を試して、ダメならshift_jisに切り替えるのがおすすめです。
7. まとめ:1行ずつ読むならreadline()・すべて読むならreadlines()
Pythonでファイルを扱うとき、readline()とreadlines()を使い分けることで、効率よくデータを処理できます。特に、with open()と組み合わせることで、安全で読みやすいコードになります。
最初のうちは、for文で1行ずつ処理する方法から慣れていくのが良いでしょう。慣れてくると、ファイルの中身を自動処理したり、条件に応じて特定の行だけ抽出したりと、さまざまな応用ができるようになります。