Как Python отслеживает, где он находится в файле при использовании .readline () - PullRequest
0 голосов
/ 21 января 2019

Python отслеживает, какая строка была прочитана с использованием readline, как он это делает.

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

Когда я снова запускаю readline, он читает вторую строку.

1 Ответ

0 голосов
/ 21 января 2019

Проще говоря, отслеживая текущую позицию указателя файла. Вот очень-очень дурацкий пример (реальная реализация основана на представлении файловых объектов на уровне системы, обрабатывает буферизацию и т. Д., Ну, в общем, она более сложна на один или несколько порядков - но основной принцип все тот же).

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        
...