gpt4 book ai didi

python - 如何从末尾开始读取python文件中的行

转载 作者:太空狗 更新时间:2023-10-29 17:37:57 25 4
gpt4 key购买 nike

我需要知道如何在 python 中读取文件中的行,以便我首先读取最后一行并以这种方式继续,直到光标到达文件的开头。有任何想法吗?

最佳答案

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

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

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

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

优点:非常容易实现(据我所知可能内置在 Python 中)
缺点:占用大量内存,读取大文件可能需要一段时间

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

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

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

优点:几乎与第一种方法一样易于实现
缺点:读取大文件可能需要一段时间

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

使用这种方法,您将从末尾按 block 或类似方式读取文件,并查看末尾在哪里。您基本上有一个缓冲区,比如说 4096 字节,并处理该缓冲区的最后一行。当您的处理(必须在该缓冲区中一次向后移动一行)到达缓冲区的开头时,您需要从您读取的第一个缓冲区之前的区域读取另一个缓冲区的数据,然后继续处理。

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

但是,它需要的内存最少,对于非常大的文件,这样做可能也值得这样做,以避免首先读取数 GB 的信息。

优点:占用很少的内存,不需要您先读取整个文件
缺点:难以实现并适用于所有极端情况


网上有很多链接展示了如何执行第三种方法:

关于python - 如何从末尾开始读取python文件中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3568833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com