import os
def init(func):
def wrapper(*args,**kwargs):
res = func(*args,**kwargs)
next(res)
return res
return wrapper
@init
def search(target):
'找到文件的绝对路径'
while True:
dir_name = yield
g = os.walk(dir_name)
for i in g:
for j in i[-1]:
if len(j.split('.'))==1:
file_path = '%s\\%s'%(i[0],j)
#print(file_path)
target.send(file_path)
@init
def opener(target):
'打开文件,获取文件句柄'
while True:
file_path = yield
with open(file_path,encoding='utf-8') as f:
target.send((file_path,f))
@init
def cat(target):
'读取文件内容'
while True:
file_path,f=yield
for line in f:
target.send((file_path,line))
@init
def grep(pattern,target):
'过滤一行内容中有无Python'
while True:
file_path,line = yield
if pattern in line:
target.send(file_path)
@init
def unrepeat(target):
'去重相同的文件路径'
file_path_l =''
while True:
file_path =yield
if file_path != file_path_l:
target.send(file_path)
file_path_l=file_path
@init
def printer():
'打印文件路径'
while True:
file_path = yield
print(file_path)
g = search(opener(cat(grep('error',unrepeat(printer())))))
g.send('d:\\Program Files(x86)\\py_fallstack_s4')
转载于:https://www.cnblogs.com/IQ-Python/p/6700335.html