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