python(18)- 协程函数及应用
def init(func):def wrapper(*args,**kwargs):
obj = func(*args,**kwargs)
next(obj)
return obj
return wrapper
@init
def food(name):
print("%s start to eat" % name)
food_list = []
while True:
food = yield food_list
food_list.append(food)
print("%s eat %s" % (name,food_list))
e = food("xyp") # xyp start to eat
e.send("apple") # xyp eat ['apple']
e.send("apple") # xyp eat ['apple', 'apple']
e.send("apple") # xyp eat ['apple', 'apple', 'apple']
......
协程 吃包子
1 #grep -rl 'python' C:\egon2 import os,time
3 def init(func):
4 def wrapper(*args,**kwargs):
5 res=func(*args,**kwargs)
6 next(res)
7 return res
8 return wrapper
9
10 #找到一个绝对路径,往下一个阶段发一个
11 @init
12 def search(target):
13 '找到文件的绝对路径'
14 while True:
15 dir_name=yield #dir_name='C:\\egon'
16 print('车间search开始生产产品:文件的绝对路径')
17 time.sleep(2)
18 g = os.walk(dir_name)
19 for i in g:
20 # print(i)
21 for j in i[-1]:
22 file_path = '%s\\%s' % (i[0], j)
23 target.send(file_path)
24
25 @init
26 def opener(target):
27 '打开文件,获取文件句柄'
28 while True:
29 file_path=yield
30 print('车间opener开始生产产品:文件句柄')
31 time.sleep(2)
32 with open(file_path) as f:
33 target.send((file_path,f))
34
35 @init
36 def cat(target):
37 '读取文件内容'
38 while True:
39 file_path,f=yield
40 print('车间cat开始生产产品:文件的一行内容')
41 time.sleep(2)
42 for line in f:
43 target.send((file_path,line))
44
45 @init
46 def grep(pattern,target):
47 '过滤一行内容中有无python'
48 while True:
49 file_path,line=yield
50 print('车间grep开始生产产品:包含python这一行内容的文件路径')
51 time.sleep(0.2)
52 if pattern in line:
53 target.send(file_path)
54
55 @init
56 def printer():
57 '打印文件路径'
58 while True:
59 file_path=yield
60 print('车间printer开始生产产品:得到最终的产品')
61 time.sleep(2)
62 print(file_path)
63
64
65
66 g=search(opener(cat(grep('python',printer()))))
67 g.send('C:\\egon')
68 g.send('D:\\dir1')
69 g.send('E:\\dir2')
协程windows 查找文件
1 import os2
3 def init(func):
4 def wrapper(*args,**kwargs):
5 obj = func(*args,**kwargs)
6 next(obj)
7 return obj
8 return wrapper
9
10 @init
11 def search(target):
12 while True:
13 dir_name = yield
14 obj = os.walk(dir_name)
15 for file in obj:
16 for path in file[-1]:
17 file_path = "%s/%s" % (file[0],path)
18 target.send(file_path)
19
20 @init
21 def opener(target):
22 while True:
23 file_path = yield
24 with open(file_path) as f:
25 target.send((file_path,f))
26 @init
27 def cat(target):
28 while True:
29 file_path,file = yield
30 for line in file:
31 target.send((file_path,line))
32 @init
33 def grep(pattern,target):
34 while True:
35 file_path,line = yield
36 if pattern in line:
37 target.send(file_path)
38 @init
39 def print_file():
40 while True:
41 file_path = yield
42 print(file_path)
43
44
45 g = search(opener(cat(grep("a",print_file()))))
46 g.send("/Users/centos/Desktop/example")
协程Linux查找文件
模拟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.txtF:\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这一行内容的文件路径
以上是 python(18)- 协程函数及应用 的全部内容, 来源链接: utcz.com/z/387626.html