• 面向过程的协程函数应用:迭代文件夹中文件内容,匹配出带有关键字的文件绝对路径


    面向过程的协程函数应用:

    python实现查询文件路径下带有python关键字的文件路径功能,类似于linux中:grep -rl 'python' /etc

    
    import os
    
    #函数定义
    def init(func):
        '装饰器:next()方法装饰给生成器'
        def wrapper(*args,**kwargs):
            g = func(*args,**kwargs) 
            next(g)  
            return g 
        return wrapper
    
    @init 
    def search(tar):
        '查询全部文件路径'
        while True:
            root_path=yield   
            lines = os.walk(root_path)
            for i in lines:
                for j in i[-1]:
                    url='%s/%s'%(i[0],j)
                    tar.send(url)
    
    @init
    def opener(tar):
        '打开文件'
        while True:
            url_path = yield
            with open(url_path,mode='r',encoding='utf8') as file:
                tar.send((url_path,file))
    
    @init
    def cat(tar):
        '读内容'
        while True:
            url,file = yield
            '''这里捕获异常是因为文件夹下存在.DS_Store隐藏文件,这个文件内
            容编码格式和utf8不一致,导致报错UnicodeDecodeError: 'utf-8'
            codec can't decode byte 0xd5 in position 318: invalid 
            continuation byte'''
            try:
                for i in file:
                    tar.send((url,i))
            except Exception:
                pass
    @init
    def grep(keyword,tar):
        '过滤内容'
        while True:
            url,txt = yield
            if keyword in txt:
                tar.send(url)
    
    @init
    def printer():
        '打印内容'
        while True:
            url = yield
            print(url)
    
    #函数调用
    g=search(opener(cat(grep('python',printer()))))
    g.send('/Users/root/Downloads/testfile')
    
    

    面向过程的编程思想特点:

    1、体系结构清晰
    2、降低程序复杂度
    3、可扩展性极差,适用于定制化需求,需求不变的功能,例如:操作系统内核、httpd、github等

  • 相关阅读:
    centos6 LVS-DR模式---分析
    centos6.6 安装 LXC
    Amoeba-mysql读写分离实战
    keepalived +mysql 实战
    nginx添加sticky模块-cookie保持会话
    haproxy转发真实IP给web
    Mysql-如何正确的使用索引以及索引的原理
    Mysql-自带的一些功能,基本用法(视图,触发器,事务,存储过程,函数,流程控制)
    Mysql-常用数据的基本操作和基本形式
    Mysql-多表连接的操作和用法
  • 原文地址:https://www.cnblogs.com/sunqim16/p/6701087.html
Copyright © 2020-2023  润新知