读取文件的最后一行。

3

想象一下,我有一个文件,其中包含

Xpto,50,30,60
Xpto,a,v,c
Xpto,1,9,0
Xpto,30,30,60

那个txt文件可以被多次追加,当我打开文件时,我只想获取txt文件的最后一行的值... 我如何在Python中做到这一点?读取最后一行?


请参考以下问题的答案:https://dev59.com/0XVC5IYBdhLWcg3wixs0。 - Robert Gamble
1
Python中搜索文件最后X行的最有效方法 - S.Lott
4个回答

10

我认为上次这个问题的答案被忽视了

如果你在Unix系统上,os.popen("tail -10 " + filepath).readlines()可能是最快的方法。否则, 它取决于你想要多么健壮。目前提出的方法都会有缺陷。为了健壮和速度,在大多数情况下, 你可能需要类似于对数搜索的东西:使用file.seek到文件末尾减去1000个字符,读取它, 检查它包含多少行,然后到EOF减去3000个字符,读取2000个字符,计算行数, 然后EOF减去7000,读取4000个字符,计算行数等等,直到你得到足够多的行数。 但如果你确定它总是在具有合理行长度的文件上运行,那么你可能不需要这一步骤。

你还可以在unix命令“tail”的源代码中发现一些启示。


1

f.seek(pos, 2) 将光标相对于文件末尾移动到“pos”位置。 尝试使用合理的值pos然后调用readlines()函数并获取最后一行。

你必须考虑当'pos'不是一个好的猜测时,例如你选择了300,但是最后一行有600个字符长!在这种情况下,只需再次尝试具有合理猜测值,直到捕获整个行。(这种最坏情况应该非常罕见)


0

为什么不直接寻找文件末尾并读取直到遇到换行符呢?

i=0
while(1):
    f.seek(i, 2)
    c = f.read(1)
    if(c=='\n'):
        break

-1

不确定是否有Python特定的实现,但更多地是与语言无关的方式,您需要跳过(seek)到文件末尾,然后以倒序读取每个字符,直到达到文件使用的换行符字符,通常是值为13的字符。从那一点开始向前读取到文件结尾,您将获得文件中的最后一行。


从文件末尾逐个读取字符是非常昂贵的。考虑一下要实现这个功能需要做什么。 - Dustin
不确定在现实生活中会有多慢。操作系统可能会进行优化,当您获取单个字节时,它可能会将整个扇区从硬盘交换到内存中。它甚至可以读取少于一个扇区的内容吗?除非您的最后一行非常长,否则您可能不会注意到减速。 - Kibbee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接