对于这个问题的一般方法,反向读取文本文件,按行,可以通过至少三种方法来解决.
一般的问题是,由于每一行可以有不同的长度,所以您不能预先知道文件中每一行的起始位置,也不知道有多少行.这意味着您需要对问题应用一些逻辑.
一般方法#1:将整个文件读入内存
使用这种方法,您只需将整个文件读入内存,在一些数据结构中,随后允许您反向处理行列表.堆栈,双向链表,甚至数组都可以做到这一点.
优点:真的很容易实现(可能内置到Python中,我知道)
缺点:使用大量内存,可能需要一段时间才能读取大文件
一般方法#2:读取整个文件,存储行的位置
使用这种方法,您还可以读取整个文件一次,而不是将整个文件(所有文本)存储在内存中,您只将文件中的二进制位置存储在每行开始的文件中.您可以将这些位置存储在与第一种方法中存储线路类似的数据结构中.
想要阅读第X行,您必须从文件中重新读取行,从您为该行开始存储的位置开始.
优点:与第一种方法几乎一样容易实现
缺点:可以花一点时间阅读大文件
一般方法#3:反向读取文件,并“查出”
使用这种方法,您将从最后读取文件块或类似文件,并查看目标位置.您基本上有一个缓冲区,也就是4096字节,并处理该缓冲区的最后一行.当您的处理,必须在该缓冲区中一次移动一行时,到达缓冲区的开始,您需要从读取的第一个缓冲区之前的区域读取另一个缓冲区值的数据,然后继续处理.
这种方法一般来说比较复杂,因为你需要处理像两条缓冲区之间的行被破坏的东西,长行甚至可以覆盖两个以上的缓冲区.
然而,这将需要最少的内存,对于真正大的文件,也可能值得这样做,以避免首先读取千兆字节的信息.
优点:使用很少的内存,不要求您先阅读整个文件
缺点:很难实现,适合所有角落
网上有许多链接,显示了如何做第三种方法: