我想鏈接迭代器一起從一個主文件讀取一個迭代器和另一個迭代器取主文件的每一行,並根據第一個輸出處理另一個文件。如何「鏈」迭代器?
,我有如下
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
再次我有什麼作品,但感覺這是不對我有一個while
迴路__next__
我有手動檢查每個子文件和明確的結束調用master
文件中的下一行。
是否有更好/更pythonic的方式做到這一點?
編輯: 這是我試圖完成的簡化問題。在真實版本中SubReader
將會被穿線,而我只想要一個MasterReader
。實際上,這對我的線程項目不起作用,但要確保在深入陷入混亂之前對迭代器進行概括。
你試過'itertools.chain'嗎? –
@PaulRooney我看着那個,但看起來它會處理第一個迭代器,然後處理第二個迭代器。我需要第一個迭代器的第一個元素,然後根據第一個迭代器的第一個元素。然後第一次然後是第二次。不過我會再看看'chain'。 – Jeff
它很長(有三部分),但這個pycon視頻可能是有趣的... [一個關於協程和併發的奇怪課程](http://pyvideo.org/pycon-us-2009/pycon-2009-- a-curious-on-coroutines-and-co.html) - 這裏有一些生產者/消費者的例子。 – wwii