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)
  • 相关阅读:
    ADO.NET
    VS调SQL中存储过程实现登陆
    摇奖
    面向对象、类、字段、属性、构造函数、析构函数
    打架
    2012/7/26Extjs笔记_Ext.grid.EditorGridPanel
    2012/7/30sql2005学习笔记
    SVN版本冲突解决办法(非加锁)
    2012/7/30sqlserver2005学习随笔
    struts环境搭建
  • 原文地址:https://www.cnblogs.com/mona524/p/7050094.html
Copyright © 2011-2022 走看看