我想围绕 open() 函数堆叠过滤器。例如,假设这些过滤器将从文件读取的流中遇到的每个 a 字符更改为 b。
例如,这是一个代码示例:
def filter (stream):
for line in stream:
yield line.replace('a', 'b')
def add_filter(filter, file):
return io.TextIOWrapper(filter(file))
def processing_file(f):
import sys
for line in f:
sys.stdout.write("aa: " + line)
f = open('./example.txt', 'r')
f = add_filter(filter, f)
processing_file(f)
我想 filter_a() 函数应该返回一个 TextIOWrapper 来模拟 open() 函数的结果。但是,我一直收到以下错误消息:
AttributeError: 'generator' object has no attribute 'readable'
事实上,我理解错误,但我不知道如何变通并使其正常工作。
请您参考如下方法:
您可以直接遍历过滤器生成器:
with open('./example.txt', 'r') as f:
for line in filter(f):
sys.stdout.write("aa: " + line)
