python(18)- 协程函数及应用

python

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:\egon

2 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 os

2

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.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这一行内容的文件路径

 

以上是 python(18)- 协程函数及应用 的全部内容, 来源链接: utcz.com/z/387626.html

回到顶部