grep -rl 'python' /root
阿新 • • 發佈:2017-06-04
註意 yield cat class 兩個 next abs file targe
# grep -rl ‘python‘ /root 搜索root目錄下文件內容包含python的文件名路徑 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: search_path = yield g=os.walk(search_path) for par_dir,_,files in g: for file in files: file_abs_path = r‘%s\%s‘ % (par_dir,file) target.send(file_abs_path) @init def opener(target): while True: file_abs_path = yield with open(file_abs_path,‘r‘,encoding=‘utf-8‘) as f: target.send((file_abs_path,f)) @init def cat(target): while True: file_abs_path,f = yield for line in f: tag =target.send((file_abs_path,line)) #註意:對於需要傳兩個yield的,在send時需要將這兩個值放在一個元組中傳遞(()) if tag: break @init def grep(target,pattern): tag = False while True: file_abs_path,line = yield tag tag = False if pattern in line: tag = True target.send(file_abs_path) @init def printer(): while True: file_abs_path = yield print(file_abs_path) #調用 x = r‘D:\Python_OldBoy\課程\day5\day5\a‘ g = search(opener(cat(grep(printer(),‘python‘)))) g= search(opener(cat(grep(printer(),‘python‘)))) g.send(x)
grep -rl 'python' /root