Skip to main content
 首页 » 编程设计

python之围绕文件对象堆叠过滤器

2025年05月04日32arxive

我想围绕 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)