閱讀完編輯之後,也許你可以修改返回任意數量文本的流對象?例如,在stream.next()
方法中,當調用.next()
時,流會以某種方式生成字符串,並返回yields
。你能做些什麼:
def next(self):
if '\n' in self.remaining:
terms = self.remaining.split('\n')
to_yield, self.remaining = terms[0], ''.join(terms[1:])
yield to_yield
else:
to_yield = self.remaining + self.generate_arbitrary_string()
while '\n' not in to_yield:
to_yield += self.generate_arbitrary_string()
to_yield, self.remaining = terms[0], ''.join(terms[1:])
yield to_yield
這個僞代碼假定流對象生成一些任意字符串generate_arbitrary_string()
。在你的第一個電話next()
,self.remaining
字符串應該是空的,所以你去else
聲明。在那裏,您連接任意字符串,直到找到一個newline
字符,在第一個newline
字符處拆分連接字符串,產生前半部分並將後半部分存儲在remaining
中。
在後續調用next()
時,首先檢查self.remaining
是否包含任何newline
字符。如果是這樣,則產生第一行,然後存儲其餘行。如果沒有,請附加一個新的任意字符串到self.remaining
並繼續如上。
不知道接收文本的結構,這是很難回答的。請添加更多您的問題 – inspectorG4dget
文本的結構是否真的很重要?這是一串帶有換行符的文本數據。發生器正在返回字符串。 – Chuu
你可以使用'for stream.split('\ n')中的line來建立自己的:yield line'嗎? – wflynny