<分区>
我正在尝试将迭代器链接在一起,其中一个迭代器从主文件读取,另一个迭代器获取主文件的每一行并根据第一个文件的输出处理另一个文件。
我的工作代码如下
class MasterReader(object):
def __init__(self, filename):
self.f = open(filename, "r")
def __iter__(self):
return self
def __next__(self):
line = self.f.readline().strip()
if line == "":
raise StopIteration
return line
class SubReader(object):
def __init__(self, mr):
self.mr = mr
def __iter__(self):
self._next()
return self
def _next(self):
self.current = open(self.mr.__next__(), "r")
def __next__(self):
while True:
line = self.current.readline().strip()
if line == "":
self._next()
continue
return line
mr = MasterReader("master")
sr = SubReader(mr)
for line in sr:
print(line)
其中 master
是一个包含多行其他文件的文件
file1
file2
file1
包含
1.a
1.b
1.c
file2
包含
2.a
2.b
2.c
输出是
1.a
1.b
1.c
2.a
2.b
2.c
再次,我所做的工作,但感觉不对,因为我在 __next__
中有一个 while
循环,我必须手动检查每个子文件的末尾,并且显式调用 master
文件中的下一行。
是否有更好/更 pythonic 的方式来做到这一点?
编辑:
这是我要完成的一个简化问题。在实际版本中,SubReader
将被线程化,我只需要一个 MasterReader
。实际上,这对我的线程项目不起作用,但我想确保在深入研究困惑之前泛化迭代器。