我的想法是摆脱用户不断使用seek(0)
来重置文本文件读取的方式。
所以相反,我尝试创建一个MyReader
,collections.Iterator
然后使用.reset()
替换seek(0)
,然后它通过保留一个self.iterable
对象从上次产生的位置继续。
class MyReader(collections.Iterator):
def __init__(self, filename):
self.filename = filename
self.iterable = self.__iterate__()
def __iterate__(self):
with open(self.filename) as fin:
for line in fin:
yield line.strip()
def __iter__(self):
for line in self.iterable:
yield line
def __next__(self):
return next(self.iterable)
def reset(self):
self.iterable = self.__iterate__()
用法类似于:
$ cat english.txt
abc
def
ghi
jkl
$ python
>>> data = MyReader('english.txt')
>>> print(next(data))
abc
>>> print(next(data))
def
>>> data.reset()
>>> print(next(data))
abc
我的问题是这是否已经存在于 Python-verse 的某个地方?特别是。如果已经有一个本地对象可以做这样的事情,我想避免重新发明轮子=)
如果不存在?这个对象看起来有点不合常理吗?因为它说它是一个迭代器,但真正的迭代器实际上是self.iterable
并且其他函数围绕它进行“重置”。