jericho0702 发表于 2018-8-14 07:00:27

python基础---面向过程编程

#grep -rl 'error' /dir/  
import os
  
def init(func):
  
    def wrapper(*args,**kwargs):
  
      g=func(*args,**kwargs)
  
      next(g)
  
      return g
  
    return wrapper
  

  
#第一阶段:找到所有文件的绝对路径
  
@init
  
def search(target):
  
    while True:
  
      filepath=yield
  
      g=os.walk(filepath)
  
      for pardir,_,files in g:
  
            for file in files:
  
                abspath=r'%s\%s' %(pardir,file)
  
                target.send(abspath)
  

  
#第二阶段:打开文件
  
@init
  
def opener(target):
  
    while True:
  
      abspath=yield
  
      with open(abspath,'rb') as f:
  
            target.send((abspath,f))
  

  
#第三阶段:循环读出每一行内容
  
@init
  
def cat(target):
  
    while True:
  
      abspath,f=yield #(abspath,f)
  
      for line in f:
  
            res=target.send((abspath,line))
  
            if res:break
  

  
#第四阶段:过滤
  
@init
  
def grep(pattern,target):
  
    tag=False
  
    while True:
  
      abspath,line=yield tag
  
      tag=False
  
      if pattern in line:
  
            target.send(abspath)
  
            tag=True
  

  
#第五阶段:打印该行属于的文件名
  
@init
  
def printer():
  
    while True:
  
      abspath=yield
  
      print(abspath)
  

  
g = search(opener(cat(grep('error'.encode('utf-8'), printer()))))
  
g.send(r'D:\python location\python36\day05\a')
页: [1]
查看完整版本: python基础---面向过程编程