【Python入門】ファイル読み込み中の現在の行番号を取得する2つの方法
Pythonで現在の行番号を取得するには?
Pythonの標準ファイルオブジェクトには、現在読み込んでいる行番号を直接取得する機能は備わっていません。しかし、工夫次第で簡単に実現できます。ここでは代表的な2つの方法を紹介します。
方法1:ラッパークラスを作成する
ファイルオブジェクトを包み込む(ラップする)クラスを定義し、readline()が呼ばれるたびに行番号をカウントする方法です。__enter__と__exit__を実装しているため、with文とも組み合わせられます。
class FileLineWrapper(object):
def __init__(self, file):
self.f = file
self.line = 0
def close(self):
return self.f.close()
def readline(self):
self.line += 1
return self.f.readline()
# 'with'ステートメントで使えるようにする
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.close()このクラスは次のように使います。
f = FileLineWrapper(open("my_file", "r"))
f.readline()
print(f.line)実行すると、最初の1行を読み込んだ直後なので「1」が出力されます。
1with文を使えば、ファイルのクローズ忘れも防げてより安全です。
with FileLineWrapper(open("my_file", "r")) as f:
while True:
line = f.readline()
if not line:
break
print(f"{f.line}行目: {line}", end="")方法2:enumerate()を使う
readline()を使わず、forループでファイルを1行ずつ処理するなら、enumerate()関数を使うのが最もシンプルでPythonらしい書き方です。
with open("my_file", "r") as f:
for line_no, line in enumerate(f, start=1):
print(line_no)enumerate()にstart=1を指定すると行番号が1から始まります(省略時は0から)。ループ内ではline_noに現在の行番号、lineにその行の内容が代入されるので、行番号の管理を自分で行う必要がありません。
まとめ
- readline()で読み進める場合 → 行番号を記録するラッパークラスを作ると便利
- forループで処理する場合 →
enumerate(f, start=1)を使うのが最も簡潔
用途に応じて使い分けることで、エラーメッセージへの行番号表示やログ解析など、行単位の処理が格段に扱いやすくなります。
-
Pythonでファイルを読み取り専用で開く方法をわかりやすく解説
Pythonで読み取りモード(r)を使ってファイルを開く基本Pythonでファイルを読み取り専用(リードモード)として開くには、open()関数の第2引数に r を指定します。なお、「r」はデフォルトのモードでもあるため、実際には省略して書くことも可能です。f = open(my_file.txt, r) file_content = f.read() f.close()上記のコードでは、my_file.txt を読み取りモードで開き、read()メソッドでファイルの内容をすべて読み込んで、変数 file_content に格納しています。処理が終わったら close() メソッドを呼び出し、
-
Pythonでファイルに書き込むには?writeモードでのファイル操作を解説
Pythonでファイルにデータを書き込むには、open()関数の第2引数に書き込みモード w を指定します。ここでは、基本的な使い方と、より安全な書き方を紹介します。基本の書き方:open()とclose()を使う最もシンプルな方法は、w モードでファイルを開き、write() メソッドで文字列を書き込んだ後、close() でファイルを閉じることです。f = open(my_file.txt, w) f.write(Hello World) f.close()このコードを実行すると、my_file.txt が書き込みモードで開かれ、ファイルの内容が「Hello World」で上書きされます。