Python 如何在使用 .readline() 时跟踪它在文件中的位置

How does Python keep track of where it is in a file when using .readline()

Python 使用 readline 跟踪读取了哪一行,它是如何做到的。

fin = open('/etc/passwd')
fin.readline()

当我再次运行 readline 时,它​​读取第二行。

只需跟踪文件指针的当前位置即可。这是一个非常非常非常简单的例子(真正的实现是基于文件对象的系统级表示、处理缓冲等,它复杂了一个或多个数量级——但基本原理是一样的)。

class FakeFile(object):
    def __init__(self, text):
        self.text = text
        self.length = len(text)
        self.pointer = 0

    def readline(self):
        if self.pointer >= self.length:
            # we've already read all the content
            return ""

        buffer = []
        while self.pointer < self.length:
            buffer.append(self.text[self.pointer])
            self.pointer += 1
            if buffer[-1] == "\n":
                break
        return "".join(buffer)


    def seek(self, position):
        if position < 0 or position > self.length:
            raise IOError("Invalid argument", 22)

        self.pointer = position

    def tell(self):
        return self.position

    # etc