函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。

面向过程的编程思想:流水线式的编程思想,在设计程序时,需要把整个流程设计出来

优点:

  • 程序的体系结构更清晰
  • 简化程序的复杂度

缺点:

  • 可扩展性及其差,所以i一般应用于不需要经常变化的软件,如:Linux内核,httpd,git等软件

实例:

实现类似Linux下的如下命令功能:

cat -rl 'dir' |grep 'keywords'

即查找‘dir目录下所有文件及子目录下的子文件的内容,并将包含‘keywords’的文件的绝对路径返回

 #面向过程式编程实现类似Linux下的cat -rl 'dir' |grep 'keywords'功能
 import os

 def init(func):
"""装饰器函数,完成生成器的初始化操作(next())"""
def wrapper(*args, **kwargs):
res = func(*args, **kwargs)
next(res)
return res
return wrapper @init
def serch(target):
"""寻找文件的绝对路径"""
while True:
dir_name = yield
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) #将文件路径传递给下个函数 @init
def opener(target):
"""打开文件,获取文件句柄"""
while True:
file_path = yield #接收上个函数的文件路径
with open(file_path, encoding='utf8') as f:
target.send((file_path, f)) #将文件路径和文件内容变量f传递给下个函数 @init
def cat(target):
"""读取文件内容"""
while True:
file_path, f = yield #接收文件路径和文件内容变量
for line in f:
target.send((file_path, line)) #将文件路径和文件行内容变量line传递给下个函数 @init
def grep(pattern, target):
"""过滤文件行内容是否包含关键字"""
while True:
file_path, line = yield #接收文件路径和文件行内容变量
if pattern in line:
target.send(file_path) #如果关键字变量‘pattern’存在于文件的行内容,将文件路径传递给下个函数 @init
def printer():
"""打印包含关键字的文件名"""
while True:
file_path = yield
print(file_path) #打印包含关键字的文件路径 g = serch(opener(cat(grep('python', printer())))) #调用函数,按定义的顺序层层调用
g.send('D:\Documents\py_fullstack_S4') #传递欲搜寻的目录,执行关键字搜索

Python基础-面向过程编程实现Linux下cat -rl ‘dir’ |grep ‘keywords’ 功能的更多相关文章

  1. 转 linux下cat命令详解

    linux下cat命令详解 http://www.cnblogs.com/perfy/archive/2012/07/23/2605550.html 简略版: cat主要有三大功能:1.一次显示整个文 ...

  2. 学号20175313 《实现Linux下od -tx -tc XXX的功能》第九周

    目录 MyOD 一.题目要求 二.题目理解 三.需求分析 四.设计思路 五.代码链接 六.代码实现过程中遇到的问题 七.运行结果截图 八.参考资料 MyOD 一.题目要求 编写MyOD.java 用j ...

  3. 实现Linux下od -tx -tc XXX的功能

    实现Linux下od -tx -tc XXX的功能 一.od命令 (1)功能 od命令用于将指定文件内容以八进制.十进制.十六进制.浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直 ...

  4. Python基础(协程函数、内置函数、递归、模块和包)-day05

    写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04  ...

  5. python基础学习1(linux命令)

    读研时转人工智能,机器学习方向,必然要用到python,于是开始自学. 1.环境: 使用linux环境下python编译,熟悉各种基本操作. 2.书籍: --  笨方法学python --   a b ...

  6. linux下cat命令详解

    简略版: cat主要有三大功能:1.一次显示整个文件.$ cat filename2.从键盘创建一个文件.$ cat > filename     只能创建新文件,不能编辑已有文件.3.将几个文 ...

  7. Linux下vi编辑器粘贴复制剪切功能

    RedHat 9.0 Linux下vi编辑器实现简单的粘贴复制剪切功能": 如果想把文件内的第三行内容黏贴到第十五行: 1.进入你的文件,(处于命令模式,而不是编辑模式) 2.将你的光标移到 ...

  8. 在linux下实现UBOOT的TFTP下载功能

    一.环境 1.条件 软件:虚拟机下linux(本文涉及到的是Ubuntu12.0.4). linux下的串口助手(例如minicom)或windows下的串口助手(例如超级终端.SecureCRT) ...

  9. Linux基础教程 linux下cat 命令使用详解

    cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1.命令格式: cat [选项] [文件] ...

随机推荐

  1. weex 编译vue成js

    cd 项目 1.开发 npm run web 开发过程中可以直接使用浏览器运行 npm run ios 2.打包 npm run build 会在 dist 文件夹 中生成js文件, 即可拖入ios ...

  2. 基础篇:4.2)规范化:3d软件工程图纸用模板

    本章目的:分享一些国标标准模板,方便作图时使用 这篇博文的内容作者会定时的更新 1.工程图模板 drawing template 定义 三维机械设计软件中的一种文件类型.通过标准化定制和使用该文件,可 ...

  3. 进阶篇:4.3)DFA设计指南:防错设计( 防呆设计)

    本章目的:每一个装配步骤都有设计防错. 1.前言 关于防错设计,作者有想说的话: 1)防错设计是DFA重要的一条.因为太过重要,作者单独开一分章写! 2)只有理解了设计防错的重要,才会去设计防错特征. ...

  4. SpringBoot学习(一)

    一.Spring Boot Spring是JavaEE轻量级代替品.无需开发重量级的(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的POJO对 ...

  5. VUE 监听局部滚动 设置ICON的位置跟随

    效果图如下: 目的: 为了让 + 号与 - 号跟随在当前 tr 的前边 第一步: 当tr指针经过时获取tr的相对位置 HTML JS 第二步:给滚动的div元素添加滚动事件获取滚动的高度 最后:设置I ...

  6. Kubeadm and Kops

    Kubeadm是Kubernetes官方推出的快速部署Kubernetes的集群工具,其思路是将Kubernetes相关服务容器化以简化部署. With the release of kubeadm ...

  7. 关于display:none;和id特性的一些需要注意的地方

    关注点一: display:none;一旦用于某个元素,那个这个元素在页面中就不再占据位置. visibility:hidden;用于某个元素时,这个元素还会占据位置. 关注点二: 即使使用了disp ...

  8. oracle 表空间tablespace

    一.Oracle 表空间的组成 Everoone knows Oracle数据库真正存放数据的是数据文件,Oracle表空间是逻辑上的概念,他在物理上是并不存在的,把多个DataFile合并到一起就是 ...

  9. 利用C#结合net use命令破解域帐号密码

    背景 我的职业是程序猿,而所在的工作单位因各种原因,对上网帐号有严格控制,近期竟然把我们的上网帐号全部停用,作为程序猿,不能上网,就如同鱼儿没有水,煮饭没有米,必须想办法解决此问题.公司的局域网环境是 ...

  10. 【javascript】onload load ready的那些事

    首先明确一下页面加载的步骤: 1.下载解析HTML文档结构 2.加载外部脚本文件与样式表文件 3.解析并执行脚本代码 4.构造HTML DOM模型 5 .加载图片等外部文件 6.页面加载完毕 接下来, ...