标签:yield span turn opener api app **kwargs *args 查看
模拟grep -rl “python” F:\xuyaping这个命令
#查看xuyaping文件夹所有的绝对路径 import os g=os.walk("F:\\xuyaping") #g为迭代器 for i in g: # print(i) #i为文件路径 for j in i[-1]: file_path="%s\\%s" %(i[0],j) print(file_path)
程序输出结果:
F:\xuyaping\xuyaping.txt.txt F:\xuyaping\xuyaping1.txt.txt F:\xuyaping\a\a.txt.txt F:\xuyaping\a\a1\a1.txt.txt F:\xuyaping\a\a1\a2\a2.txt.txt F:\xuyaping\b\b.txt.txt
代码如下:
#模拟grep -rl “python” F:\xuyaping这个命令 import os,time #初始化被装饰的函数,使其运行到yield所在的行 def init(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) next(res) return res return wrapper #search函数用循环找到一个绝对路径,往下一个阶段opener函数传递一次,直至传递完。 # 所以opener函数循环的收,所以opener函数用while循环。 @init def search(target): #定义生成器target,用于传递路径file_path "找到文件的绝对路径" while True: dir_name=yield print("车间search开始生产产品:文件的绝对路径") time.sleep(1) g = os.walk(dir_name) for i in g: for j in i[-1]: file_path="%s\\%s" %(i[0],j) target.send(file_path) #传递路径file_path,给opener函数 @init def opener(target): "打开文件,获取文件句柄" while True: file_path=yield #opener函数接收search函数传递过来的路径file_path。opener函数将执行结果传递给search函数中的target print("车间opener开始生产产品:文件句柄") time.sleep(1) with open(file_path) as f: target.send((file_path,f)) #同样传递句柄f 和file_path给cat函数,所以此时用生成器target来传递,同上 @init def cat(target): "读取文件内容" while True: file_path,f=yield #cat函数接收opener函数传递过来的句柄f 和file_path。cat函数将执行结果传递给opener函数中的target print("车间cat开始生产产品:文件的一行内容") time.sleep(1) for line in f: target.send((file_path,line)) @init def grep(pattern,target): "过滤一行内容中有无python" while True: file_path,line=yield print("车间grep开始生产产品:包含python这一行内容的文件路径") time.sleep(1) if pattern in line: target.send(file_path) @init def printer(): "打印文件路径" while True: file_path=yield print("车间printer开始生产产品:得到最终的产品") time.sleep(1) print(file_path) #g=search("target")--->g=search(opener(target))--->g=search(opener(cat(target))) # --->g=search(opener(cat(grep(patteren,target))))--->g=search(opener(cat(grep("python",printer())))) g=search(opener(cat(grep("python",printer())))) g.send("F:\\xuyaping")
运行结果:
车间search开始生产产品:文件的绝对路径 车间opener开始生产产品:文件句柄 车间cat开始生产产品:文件的一行内容 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间printer开始生产产品:得到最终的产品 F:\xuyaping\xuyaping.txt.txt 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间opener开始生产产品:文件句柄 车间cat开始生产产品:文件的一行内容 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间printer开始生产产品:得到最终的产品 F:\xuyaping\xuyaping1.txt.txt 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间opener开始生产产品:文件句柄 车间cat开始生产产品:文件的一行内容 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间opener开始生产产品:文件句柄 车间cat开始生产产品:文件的一行内容 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间printer开始生产产品:得到最终的产品 F:\xuyaping\a\a1\a1.txt.txt 车间opener开始生产产品:文件句柄 车间cat开始生产产品:文件的一行内容 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间opener开始生产产品:文件句柄 车间cat开始生产产品:文件的一行内容 车间grep开始生产产品:包含python这一行内容的文件路径 车间printer开始生产产品:得到最终的产品 F:\xuyaping\b\b.txt.txt 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径 车间grep开始生产产品:包含python这一行内容的文件路径
标签:yield span turn opener api app **kwargs *args 查看
原文地址:http://www.cnblogs.com/xuyaping/p/6701094.html