想象一下,我有一个文件,其中包含
Xpto,50,30,60
Xpto,a,v,c
Xpto,1,9,0
Xpto,30,30,60
那个txt文件可以被多次追加,当我打开文件时,我只想获取txt文件的最后一行的值... 我如何在Python中做到这一点?读取最后一行?
想象一下,我有一个文件,其中包含
Xpto,50,30,60
Xpto,a,v,c
Xpto,1,9,0
Xpto,30,30,60
那个txt文件可以被多次追加,当我打开文件时,我只想获取txt文件的最后一行的值... 我如何在Python中做到这一点?读取最后一行?
我认为上次这个问题的答案被忽视了。
如果你在Unix系统上,
os.popen("tail -10 " + filepath).readlines()
可能是最快的方法。否则, 它取决于你想要多么健壮。目前提出的方法都会有缺陷。为了健壮和速度,在大多数情况下, 你可能需要类似于对数搜索的东西:使用file.seek到文件末尾减去1000个字符,读取它, 检查它包含多少行,然后到EOF减去3000个字符,读取2000个字符,计算行数, 然后EOF减去7000,读取4000个字符,计算行数等等,直到你得到足够多的行数。 但如果你确定它总是在具有合理行长度的文件上运行,那么你可能不需要这一步骤。你还可以在unix命令“tail”的源代码中发现一些启示。
f.seek(pos, 2)
将光标相对于文件末尾移动到“pos”位置。
尝试使用合理的值pos然后调用readlines()函数并获取最后一行。
你必须考虑当'pos'不是一个好的猜测时,例如你选择了300,但是最后一行有600个字符长!在这种情况下,只需再次尝试具有合理猜测值,直到捕获整个行。(这种最坏情况应该非常罕见)
为什么不直接寻找文件末尾并读取直到遇到换行符呢?
i=0
while(1):
f.seek(i, 2)
c = f.read(1)
if(c=='\n'):
break
不确定是否有Python特定的实现,但更多地是与语言无关的方式,您需要跳过(seek)到文件末尾,然后以倒序读取每个字符,直到达到文件使用的换行符字符,通常是值为13的字符。从那一点开始向前读取到文件结尾,您将获得文件中的最后一行。