仅从 Python 中的大文件中读取特定行号?

Only read specific line numbers from a large file in Python?

我有一个非常大的文件,我想打开它并从中读取特定的行,我总是知道我想要的数据所在的行号,但我不想每次都读取整个文件是时候阅读该特定行了。

有没有办法只读取 Python 中的特定行?或者最有效的方法是什么(即尽可能少地读取文件以加快执行速度)?

遗憾的是,由于一个简单的原因,这是不可能的:线路不存在。您的文本编辑器向您显示的一行只是两段文本,中间有一个换行符(您可以在 python 中输入 \n。如果所有行的长度都相同,则它是可能,但我认为这里不是这种情况。

如果您只阅读您的内容+您的内容,则阅读量最少。这意味着您不应使用 readreadlines。而是使用 readline 来获取和丢弃不需要的行,然后再次使用它来获取您想要的内容。这可能是最有效的方法。

这里有一些选项:

  1. Go over the file at least once and keep track of the file offsets of the lines you are interested in。如果您可能多次查找这些行,这是一个很好的方法 并且 文件不会被更改。
  2. 考虑更改数据格式。例如 csv 而不是 json(见评论)。
  3. 如果别无选择,请使用传统的:
def get_lines(..., linenums: list):
    with open(...) as f:
        for lno, ln in enumerate(f):
            if lno in linenums:
                yield ln

在一个 4GB 的文件上,linenums = [n // 4, n // 2, n - 1] 花费了大约 6 秒,其中 n = lines_in_file