python读取指定行到最后一行_如何从python文件的末尾开始读取行

解决这个问题的一般方法是,按行反向读取文本文件,至少可以通过三种方法来解决。

一般的问题是,由于每一行的长度可能不同,因此您无法预先知道文件中每一行的起始位置,也无法知道其中有多少行。这意味着您需要对问题应用一些逻辑。

一般方法1:将整个文件读入内存

使用这种方法,您只需将整个文件读取到内存中,在某些数据结构中,随后允许您反向处理行列表。堆栈、双链接列表甚至数组都可以做到这一点。

优点:非常容易实现(据我所知,可能内置到Python中)

缺点:占用大量内存,读取大文件可能需要一段时间

一般方法2:读取整个文件,存储行的位置

使用这种方法,您还可以读取整个文件一次,但不是将整个文件(所有文本)存储在内存中,而是将二进制位置存储在文件中每行开始的位置。您可以将这些位置存储在与第一种方法中存储行的数据结构相似的数据结构中。

无论您想读取X行,都必须从文件中重新读取该行,从存储该行的起始位置开始。

优点:几乎与第一种方法一样易于实施

缺点:读取大文件可能需要一段时间

一般方法#3:反向读取文件,然后“找出答案”

使用这种方法,您将从末尾按块或类似方式读取文件,并查看结尾的位置。基本上有一个4096字节的缓冲区,并处理该缓冲区的最后一行。当一次只能在缓冲区中向后移动一行的处理到达缓冲区的开始时,您需要从您读取的第一个缓冲区之前的区域读取另一个缓冲区值的数据,然后继续处理。

这种方法通常更为复杂,因为您需要处理这样的事情:行在两个缓冲区上被打断,长行甚至可以覆盖两个以上的缓冲区。

然而,它需要最少的内存,对于真正大的文件,这样做也值得避免首先读取千兆字节的信息。

优点:占用的内存很少,不需要您先读取整个文件

缺点:很难实施,也很难适用于所有角落的情况

网络上有许多链接显示了如何进行第三种方法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值