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