5

ファイルの各行を処理したいが、最後の行には特別な処理が必要だとします:

with open('my_file.txt') as f:
    for line in f:
        if <line is the last line>:
            handle_last_line(line)
        else:
            handle_line(line)

問題は、どのように実装するかです。Python にはファイルの終わりを検出する機能がないようです。

行をリストに読み込む以外の解決策はありますか ( f.readlines() などを使用)?

4

2 に答える 2

14

の行を処理します。

with open('my_file.txt') as f:
    line = None
    previous = next(f, None)
    for line in f:
        handle_line(previous)
        previous = line

    if previous is not None:
        handle_last_line(previous)

ループが終了すると、最後の行が読み取られたことがわかります。

最後の N 行を個別に処理できる一般的なバージョンでは、collections.deque()objectを使用します。

from collections import deque
from itertools import islice

with open('my_file.txt') as f:
    prev = deque(islice(f, n), n)
    for line in f:
        handle_line(prev.popleft())
        prev.append(line)

    for remaining in prev:
        handle_last_line(remaining)
于 2013-08-26T17:32:35.997 に答える