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

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

    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等

  • 相关阅读:
    刚体动力学
    碰撞检测系统
    动画系统II
    动画系统
    Game Develop Books
    光照技术
    LR参数组取值操作方法
    loadrunner测试ajax框架
    ​Web(click and script) 与 Web(HTTP/HTML)协议区别
    性能测试常用的linux命令
  • 原文地址:https://www.cnblogs.com/sunqim16/p/6701087.html
Copyright © 2011-2022 走看看