zoukankan      html  css  js  c++  java
  • 面向过程编程实例------grep-rl 'root 路径

    #应用:grep -rl 'root' /etc
    
    import os
    def deco(func):
        def wrapper(*args):
            g=func(*args)
            next(g)
            return g
        return wrapper
    
    start_path=r'/Users/mona/Desktop/python学习/study/a'
    
    #阶段一:递归地找文件的绝对路径,把路径给阶段二
    @deco
    def search_func(target):
        while True:
            start_path=yield
            g=os.walk(start_path)
            for par_dir,_,files in g:
                for file in files:
                    file_path=r'%s/%s'%(par_dir,file)
                    target.send(file_path)
    
    #阶段二:收到文件路径,打开文件获取对象,并把文件对象发给阶段三
    @deco
    def open_func(target):
        while True:
            file_path=yield
            with open(file_path,'r',encoding='utf-8') as f:
                target.send((file_path,f))
    
    #阶段三收到文件对象,读取每一行,并把内容发给阶段四
    @deco
    def cat_func(target):
        while True:
            file_path,f=yield
            for line in f :
                res=target.send((file_path,line))
                if res:
                    break
    
    #阶段四:收到内容,判断root是否在内容中,把符合条件的文件名发给阶段五
    @deco
    def gerp_func(target,pattern):
        tag=False
        while True:
            file_path,line=yield tag
            tag=False
            if pattern in line:
                target.send(file_path)
                tag=True
    
    #阶段五:收到文件名,并打印
    @deco
    def printer_func():
        while True:
            filename=yield
            print(filename)
    
    g=search_func(open_func(cat_func(gerp_func(printer_func(),'root'))))
    g.send(start_path)
  • 相关阅读:
    css text-transform 属性
    CSS3 @media编写响应式页面
    css :first child与:first-of-type的区别
    前端外语网站合集
    webpack配置自动添加CSS3前缀
    vue中extend/component/mixins/extends的区别
    js缓动函数
    [LeetCode] 78. 子集
    [LeetCode] 76. 最小覆盖子串
    [LeetCode] 75. 颜色分类
  • 原文地址:https://www.cnblogs.com/mona524/p/7050094.html
Copyright © 2011-2022 走看看