Python练习-面向过程编程-模拟Grep命令
其实这个面向过程编写程序,是编写程序的基础,所以一定要好好掌握
此程序涉及知识点:装饰器,生成器,协程器应用
# 编辑者:闫龙
import os
Distinct = [] #定义一个列表用于判断重复的文件
def AutoNext(Target): #生成器的Next装饰器
def NextTarget(*args):
res = Target(*args) #res得到Target(*args)的执行结果(Target())
next(res)#让res进行一次next到yield的操作
return res#返回res当前的状态(next到yield的状态)
return NextTarget @AutoNext#调用生成器的Next装饰器
def InputGetPath(Target):
InputPath = yield #InputPath等待yield的返回值
PathGen = os.walk(InputPath)#将InputPath中的目录子目录和文件游走后返回列表[路径,[子目录],[文件]]
for i in PathGen:
for j in i[-1]:
FilePath ="%s\\%s"%(i[0],j) #将格式化好的路径传递给FilePath
Target.send(FilePath) #使用Send方式传值给Target中的yield @AutoNext
def OpenFile(Target):
while True:
F = yield#F等待yild的返回值,这里是由InputPath()中的Target.send传递过来的
with open(F) as f:#将F路径的文件打开赋值给f
Target.send((f,F))#由于最后要显示文件路径所以,这里要以元组的方式传递两个值给下一个Target中的yield,f是文件句柄,F是文件路径
#("asdfasdf","F:\\a\\a.txt")
@AutoNext
def CatFile(Target):
while True:
f,F = yield#上方的OpenFile已经将f和F值传递到了这里的yield并返回给f,F,既然OpenFile传递了两个值,这里也要用两个值接收
#f="asdfasdf",F="F:\\a\\a.txt"
for i in f :
Target.send((i,F))#与OpenFile中的send一样,将i的值和F的值传递给下一个Target中的yield @AutoNext
def GrepLine(Target,chioce):#chioce是用户输入的即将检索的关键字
while True:
line,F = yield#同样还是要用两个参数来接收yield的返回值
if (chioce in line):
Target.send(F) #这里就不需要传递两个值了,因为最后的Target只需要的到文件路径就可以了 @AutoNext
def PrintInfo():
while True:
F = yield
if(F not in Distinct): #当F这个路径值不存在Distinct中时将F追加到Distinct列表中
Distinct.append(F)
print(F) chioce = input("请输入你要检索的关键字:")
#这里的调用其实,不难,仔细分析一下就能很容易的理解了
Gene = InputGetPath(OpenFile(CatFile(GrepLine(PrintInfo(),chioce))))
try: #针对Stop告警的异常处理
Gene.send("F:\\a")
except StopIteration:
print("检索完成")
Python练习-面向过程编程-模拟Grep命令的更多相关文章
- yield的表达式形式、面向过程编程(grep -rl 'root' /etc)
一.yield的表达形式 def foo(): print('starting') while True: x=yield None#return 2 print('value :',x) g=foo ...
- Python基础-面向过程编程实现Linux下cat -rl ‘dir’ |grep ‘keywords’ 功能
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
- 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法
1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...
- Python模拟wc命令(软件测试第二次作业)
Python实现字符,单词,行,代码行,空行及可视化 Gitee项目地址:https://gitee.com/biubiubiuLYQ/word_and_character_statistics 一. ...
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield No ...
- python基础之生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为 ...
- python迭代器-迭代器取值-for循环-生成器-yield-生成器表达式-常用内置方法-面向过程编程-05
迭代器 迭代器 迭代: # 更新换代(其实也是重复)的过程,每一次的迭代都必须基于上一次的结果(上一次与这一次之间必须是有关系的) 迭代器: # 迭代取值的工具 为什么用迭代器: # 迭代器提供了一种 ...
- Python基础(协程函数、内置函数、递归、模块和包)-day05
写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04 ...
- Day4 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式、序列化与反序列化
一.装饰器 一.装饰器的知识储备 1.可变长参数 :*args和**kwargs def index(name,age): print(name,age) def wrapper(*args,**k ...
随机推荐
- vSphere下安装Hyper-V
在vSphere 5.5中默认是无法嵌套安装Hyper-V的,必须在vSphere中稍作修改. 1. 勾选这两个选项,如果是灰色,请升级虚拟机版本至最新: 2. 在配置文件中手动加入这一行参数: 3. ...
- keydown和KeyPress事件有何不同
KEYPRESSWhen a windowed control receives a key-press message (WM_CHAR) from Windows, its message han ...
- 谁能告诉delphi7 的updatebatch使用属性说明?
谁能告诉delphi7 的updatebatch使用属性说明? ADODataSet1.UpdateBatch(arAll); 就是提交你的数据集到数据库 arCurrentOnly the upda ...
- VLD 无法打印堆栈调用情况
调试时遇到了一个比较郁闷的问题:同样一个MFC工程,复制之后无任何附加操作,VLD便无法正常打印内存泄漏处的堆栈调用了 百度了一下,重要找到了答案:“VLD不支持中文” 复制工程时windows自动在 ...
- npm 镜像修改
1, 修改 下载仓库为淘宝镜像 npm config set registry http://registry.npm.taobao.org/ 2, 如果要发布自己的镜像需要修改回来 npm co ...
- service依赖dao的接口进行数据传输
service依赖dao的接口进行数据传输
- 01.基于IDEA+Spring+Maven搭建测试项目--综述
目前公司的测试工作中常见两种接口:HTTP和Dubbo,这两种接口类型均可以使用相关测试工具进行测试,但都会有一定的局限性和不便之处,具体如下: 1.HTTP接口,当需要对于参数进行加密解密时,就得对 ...
- tomcat启动后过一会就自动关闭
1.打开tomcat 下的log查看关键字眼 常见问题就是端口被占用,被idea 页面启动占用了
- 【题解】HAOI2018染色
好坑啊不开心…… 其实这题的想法还是比较简单粗暴的.题目明示恰好xxx,显然排除斜率二分这个玩意儿,那么不就只剩下容斥了嘛…… 令 \(A_{x}\) 为恰好出现了 \(S\) 次的至少有 \(x\) ...
- 【题解】玲珑杯河南专场17B
容斥大法妙~其实网上很多的题解虽然给出了容斥系数,但是并没有说明为什么是这个样子的.在这里解释一下好了. 考虑用容斥,实际上就是让 \(ans = \sum_{T\subseteq S}^{\ }f_ ...