给定文本I / O流(例如来自open()
或StringIO()
),如何创建另一个过滤掉与特定模式匹配的行的流,而不首先读取整个输入流?我知道我可以轻松地使用(line for line in input if filter(line))
进行迭代,但我想要一个可搜索的流。我也理解,即使基础流允许随机访问,搜索也需要读取整个流,但这仍然比在StringIO("".join(line for line in input if filter(line)))
中读取整个文件更好。
(作为一个附加组件,欢迎指点如何记住重复搜索!)