在Python中,如何测试一行是否是最后一行?

use*_*866 5 python

假设我想处理文件的每一行,但最后一行需要特殊处理:

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)
Run Code Online (Sandbox Code Playgroud)

问题是,如何实施?似乎没有用于在Python中检测文件结尾的功能.

是否有另一种解决方案,而不是将行读入列表(使用f.readlines()或类似)?

Mar*_*ers 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)
Run Code Online (Sandbox Code Playgroud)

当循环终止时,您知道最后一行刚被读取.

通用版本允许您单独处理N个最后几行,使用collections.deque()对象:

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)
Run Code Online (Sandbox Code Playgroud)