Python:检测当前读取的文件行是否为最后一行

15 投票
8 回答
33066 浏览
提问于 2025-04-18 14:57

我在用Python逐行读取一个文件,想知道在读取的时候,哪一行是最后一行,类似这样的需求:

 f = open("myfile.txt")
 for line in f:
    if line is lastline:
       #do smth

我在一些例子中发现,通常需要使用寻址和完整读取文件来计算行数等等。那我能不能直接判断当前这一行就是最后一行呢?我试着去检查是否有"\n"这个符号,但在很多情况下,最后一行后面并没有这个符号。

如果我的问题重复了,我很抱歉,因为我在Stack Overflow上没有找到答案。

8 个回答

2

这是一个老问题,但如果你想允许最后一行是空的,这个方法更好:

with open("myfile.txt") as f:
    while True:
        line = f.readline()
        # do smth
        if line[-1:] != '\n':
            # do smth with the last line
            break

或者更容易读懂:

with open("myfile.txt") as f:
    while True:
        line = f.readline()
        # do smth
        if not line.endswith('\n'):
            # do smth with the last line
            break
2

你可以试试获取下一行内容,如果出现错误就捕捉这个错误。因为据我所知,Python 的迭代器没有内置的 hasNext 方法。

9
import os
path = 'myfile.txt'
size = os.path.getsize(path)
with open(path) as f:
    for line in f:
        size -= len(line)
        if not size:
            print('this is the last line')
            print(line)

这里有一个替代方案,适合处理非常大的文件,因为这样的文件遍历起来可能会很慢。这个方法是从文件的末尾开始,反向读取文件,使用了seek这个功能。它假设文件不是二进制格式,也没有被压缩,并且至少有一个换行符,而且最后一个字符是换行符。

import os
path = 'myfile.txt'
size = os.path.getsize(path)
with open(path) as f:
    for i in range(1, size):
        f.seek(size - 1 - i)
        if f.read(1) == '\n':
            print('This is the last line.:')
            last_line = f.read()
            print(last_line)
            break
9

检查这一行是否是最后一行:

with open("in.txt") as f:
    lines = f.readlines()
    last = lines[-1]
    for line in lines:
        if line is last:
            print id(line),id(last)
            # do work on lst line
        else:
            # work on other lines

如果你想要倒数第二行,可以用 last = lines[-2]

或者直接这样:

with open("in.txt") as f:
    lines = f.readlines()
    last = lines[-1]
    for line in lines[:-1]:
        # work on all but last line
    # work on last
3

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这时候,我们可以去一些技术论坛,比如StackOverflow,去寻找解决方案。在这些论坛上,很多人会分享他们的经验和解决办法,帮助其他人解决类似的问题。

当你在这些论坛上提问时,记得描述清楚你遇到的问题,包括你使用的编程语言、你写的代码、以及你希望实现的目标。这样,其他人才能更好地理解你的问题,并给出有效的建议。

同时,查看别人提问和回答的问题也是一个很好的学习方式。你可以看到不同的解决方案,了解更多的编程技巧和知识。

总之,技术论坛是一个很好的资源,可以帮助你解决编程中的难题,提升你的技能。

secondLastLine = None
lastLine = None
with open("myfile.txt") as infile:
    secondLastLine, lastLine = infile.readline(), infile.readline()
    for line in infile:
        # do stuff
        secondLastLine = lastLine
        lastLine = line

# do stuff with secondLastLine

撰写回答