0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

4个Python经典项目实战,练手必备!

叶枫架构师 来源:叶枫架构师 作者:叶枫架构师 2022-02-23 17:06 次阅读

Python是一种极具可读性和通用性的编程语言。Python这个名字的灵感来自于英国喜剧团体Monty Python,它的开发团队有一个重要的基础目标,就是使语言使用起来很有趣。Python易于设置,并且是用相对直接的风格来编写,对错误会提供即时反馈,对初学者而言是个很好的选择。

Python是一种多范式语言,也就是说,它支持多种编程风格,包括脚本和面向对象,这使得它适用于通用目的。随着越来越多地在工业中,被诸如联合太空联盟(NASA的主要飞机支持承包商)和工业光魔(VFX 和卢卡斯影业的动画工作室)等组织使用,Python 为那些寻求额外编程语言的人提供了巨大的潜力 。

![image](https://upload-images.jianshu.io/upload_images/15344105-5ac55e805898abf1?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
当一个重要的被称为comp.lang.python的Python新闻组在1994年形成时,Python 的用户基础不断增长,这为Python成为开源开发中最受欢迎的编程语言之一铺平了道路。

Python当下真的很火。Python实战项目,也一直尤为关注,接下来,和大家介绍下Python练手的实战项目。

Python项目练习一:即时标记

这是《Python基础教程》后面的实践,照着写写,一方面是来熟悉Python的代码方式,另一方面是练习使用Python中的基本的以及非基本的语法,做到熟能生巧。

这个项目一开始比较简单,不过重构之后就有些复杂了,但是更灵活了。

按照书上所说,重构之后的程序,分为四个模块:处理程序模块,过滤器模块,规则(其实应该是处理规则),语法分析器。

先来说处理程序模块,这个模块的作用有两个,一个是提供那些固定的html标记的输出(每一个标记都有start和end),另一个是对这个标记输出的开始和结束提供了一个友好的访问接口。来看下程序handlers.py:

![image](https://upload-images.jianshu.io/upload_images/15344105-0223181b32790536?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

这个程序堪称是整个“项目”的基石所在:提供了标签的输出,以及字符串的替换。理解起来也比较简单。

再来看第二个模块“过滤器”,这个模块更为简单,其实就是一个正则表达式的字符串。相关代码如下:

![image](https://upload-images.jianshu.io/upload_images/15344105-4aa8ddb5175514d9?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

这就是三个过滤器了,分别是:强调牌过滤器(用×号标出的),url牌过滤器,email牌过滤器。熟悉正则表达式的同学理解起来是没有压力的。

再来看第三个模块“规则”,这个模块,抛开那祖父类不说,其他类应该有的两个方法是condition和action,前者是用来判断读进来的字符串是不是符合自家规则,后者是用来执行操作的,所谓的执行操作就是指调用“处理程序模块”,输出前标签、内容、后标签。 来看下这个模块的代码,其实这个里面几个类的关系,画到类图里面看会比较清晰。 rules.py:

![image](https://upload-images.jianshu.io/upload_images/15344105-e8db657f125b7ad9?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

补充utils.py:

![image](https://upload-images.jianshu.io/upload_images/15344105-47996443f4cf845b?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

如果你在学习Python的过程中遇见了很多疑问和难题,可以加-q-u-n 227 -435-450里面有软件视频资料免费

总结一下:

最后隆重的来看下“语法分析器模块”,这个模块的作用其实就是协调读入的文本和其他模块的关系。在往重点说就是,提供了两个存放“规则”和“过滤器”的列表,这么做的好处就是使得整个程序的灵活性得到了极大的提高,使得规则和过滤器变成的热插拔的方式,当然这个也归功于前面在写规则和过滤器时每一种类型的规则(过滤器)都单独的写成了一个类,而不是用if..else来区分。 看代码:

![image](https://upload-images.jianshu.io/upload_images/15344105-bccfefe9df21ab2e?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

这个模块里面的处理思路是,遍历客户端(也就是程序执行的入口)给插进去的所有的规则和过滤器,来处理读进来的文本。

有一个细节的地方也要说一下,其实是和前面写的呼应一下,就是在遍历规则的时候通过调用condition这个东西来判断是否符合当前规则。

我觉得这个程序很像是命令行模式,有空可以复习一下该模式,以保持记忆网节点的牢固性。

最后说一下我以为的这个程序的用途:

1、用来做代码高亮分析,如果改写成js版的话,可以做一个在线代码编辑器。

2、可以用来学习,供我写博文用。

还有其他的思路,可以留下您的真知灼见。

补充一个类图,很简陋,但是应该能说明之间的关系。另外我还是建议如果看代码捋不清关系最好自己画图,自己画图才能熟悉整个结构。

![image](https://upload-images.jianshu.io/upload_images/15344105-1f2b146fa253db0a?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Python项目练习二:画幅好画

这是《Python基础教程》中的第二个项目,关于Python操作PDF,涉及到的知识点:

1、urllib的使用

2、reportlab库的使用

这个例子着实很简单,不过我发现在Python里面可以直接在数组[]里面写for循环,真是越用越方便。

下面是代码:

![image](https://upload-images.jianshu.io/upload_images/15344105-dcc1b04cacc5dfc2?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Python项目练习三:万能的XML

这个项目的名称与其叫做万能的XML不如叫做自动构建网站,根据一份XML文件,生成对应目录结构的网站,不过只有html还是太过于简单了,如果要是可以连带生成css那就比较强大了。这个有待后续研发,先来研究下怎么html网站结构。 既然是通过XML结构生成网站,那所有的事情都应该由这个XML文件来。先来看下这个XML文件,website.xml:

![image](https://upload-images.jianshu.io/upload_images/15344105-e036165132747246?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

有了这个文件,下面应该来看怎么通过这个文件生成网站。

首先我们要解析这个xml文件,Python解析xml和在Java中一样,有两种方式,SAX和DOM,两种处理方式不同点在于速度和范围,前者讲究的是效率,每次只处理文档的一小部分,快速而能有效的利用内存,后者是相反的处理方式,先把所有的文档载入到内存,然后再进行处理,速度比较慢,也比较消耗内存,唯一的好处就是可以操作整个文档。

在Python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sax.handler中的ContentHandler,后面的这个类是要和parse函数来配合使用的。使用方式如下: parse('xxx.xml',xxxHandler),这里面的xxxHandler要继承上面的ContentHandler,不过只要继承就行,不需要有所作为。 然后这个parse函数在处理xml文件的时候,会调用xxxHandler中的startElement函数和endElement函数来一个xml中的标签的开始和结束,中间的过程使用一个名为characters的函数来处理标签内部的所有字符串。

有了上面的这些认识,我们已经知道如何处理xml文件了,然后再来看那个罪恶的源头website.xml文件,分析其结构,只有两个节点:page和directory,很明显page表示一个页面,directory表示一个目录。

所以处理这个xml文件的思路就变的清晰了。读取xml文件的每一个节点,然后判断是page还是directory如果是page则创建html页面,然后把节点中的内容写到文件里。如果遇到directory就创建一个文件夹,然后再处理其内部的page节点(如果存在的话)。

下面来看这部分代码,书中的实现比较复杂,比较灵活。先来看,然后在分析。

![image](https://upload-images.jianshu.io/upload_images/15344105-3ad15bf93ce91e6e?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

看起来这个程序上面分析的复杂了一些,不过伟人毛毛说过,任何复杂的程序都是纸老虎。那我们再来分析一下这个程序。

首先看到这个程序是有两个类,其实完全可以当作一个类,因为有了继承。

然后再来看它多了些什么,除了我们分析出来的startElement和endElement以及characters,多出来了startPage,endPage;startDirectory,endDirectory;defaultStart,defaultEnd;ensureDirectory;writeHeader,writeFooter;和dispatch,这些个函数。除了dispatch,前面的函数都很好理解,每一对函数都是单纯的处理对应的html标签以及xml节点。而dispatch比较复杂,复杂之处在于他是用来动态拼合函数并且进行执行的。

dispatch的处理思路是,首先根据传递的参数(就是操作名称以及节点名称)判断是否存在对应的函数如startPage,如果不存在则执行default+操作名称:如defaultStart。

一个函数一个函数搞清楚之后,就知道整个处理流程是什么样了。首先创建一个public_html的文件,存放整个网站,然后读xml的节点,通过startElement和endElement调用dispatch进行处理。然后就是dispatch怎么调用具体的处理函数了。 到此为止,这个项目算是分析完了。

主要掌握的内容一个是python中使用SAX处理XML,另一个就是python中的函数的使用,比如getattr,传参数时的星号……

python项目练习四:新闻聚合

书中的第四个练习,新闻聚合。现在很少见的一类应用,至少我从来没有用过,又叫做Usenet。这个程序的主要功能是用来从指定的来源(这里是Usenet新闻组)收集信息,然后讲这些信息保存到指定的目的文件中(这里使用了两种形式:纯文本和html文件)。这个程序的用处有些类似于现在的博客订阅工具或者叫RSS订阅器。

先上代码,然后再来逐一分析:

![image](https://upload-images.jianshu.io/upload_images/15344105-ab02782628b69671?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

这个程序,首先从整体上进行分析,重点部分在于NewsAgent,它的作用是存储新闻来源,存储目标地址,然后在分别调用来源服务器(NNTPSource以及SimpleWebSource)以及写新闻的类(PlainDestination和HTMLDestination)。所以从这里也看的出,NNTPSource是专门用来获取新闻服务器上的信息的,SimpleWebSource是获取一个url上的数据的。而PlainDestination和HTMLDestination的作用很明显,前者是用来输出获取到的内容到终端的,后者是写数据到html文件中的。

有了这些分析,然后在来看主程序中的内容,主程序就是来给NewsAgent添加信息源和输出目的地址的。

这确实是个简单的程序,不过这个程序可是用到了分层了。

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4601

    浏览量

    67337
  • python
    +关注

    关注

    53

    文章

    4703

    浏览量

    83704
收藏 人收藏

    评论

    相关推荐

    盘点那些硬件+项目学习套件:STM32MP157 Linux开发板及入门常见问题解答

    、资源扩展板等丰富的扩展模块,可拓展物联网、人工智能等相关技术学习,还可以拓展丰富的项目实战,非常贴合企业当下开发需求,是一款嵌入式Linux入门进阶必备开发板。 ▋界面及项目演示 ▋
    发表于 02-01 14:25

    pycharm怎么配置python环境变量

    PyCharm 是一种以 Python 为主的集成开发环境 (IDE),它提供了一系列的功能用于开发、调试、测试和部署 Python 程序。在使用 PyCharm 开发 Python 项目
    的头像 发表于 11-29 14:56 1293次阅读

    windows7可以安装python什么版本

    Windows 7可以安装多个Python版本,以下是适用于Windows 7的常见Python版本: Python 2.7:Python 2是2.x系列的最后一个版本,它是许多旧代码
    的头像 发表于 11-23 17:15 2w次阅读

    pycharm中python interpreter怎么设置

    在PyCharm中设置Python解释器非常简单,只需按照以下步骤操作: 打开PyCharm,并打开你的项目。 在菜单栏中选择"File"(文件),然后选择"Settings"(设置
    的头像 发表于 11-22 11:08 1511次阅读

    python编写斐波那契数列

    斐波那契数列是一个非常经典的数学问题,它具有广泛的应用和研究价值。在这篇文章中,我将使用Python编写斐波那契数列的代码,并详细解释代码的逻辑和执行过程。 首先,让我们来介绍一下斐波那契数列的定义
    的头像 发表于 11-21 15:04 911次阅读

    经典设计经验笔记,电子工程师必备基础知识

    电子发烧友网站提供《经典设计经验笔记,电子工程师必备基础知识.pdf》资料免费下载
    发表于 11-21 11:13 9次下载
    <b class='flag-5'>经典</b>设计经验笔记,电子工程师<b class='flag-5'>必备</b>基础知识

    Python项目中遇到的10个安全陷阱

    极少的微妙之处或细节会使开发者们疏忽大意,从而在代码中引入严重的安全漏洞。 在这篇博文中,我们将分享在实际 Python 项目中遇到的 10 个安全陷阱。我们选择了一些在技术圈中不太为人所知的陷阱。通过介绍每个问题及其造成的影响,我们希望提高人们对
    的头像 发表于 10-30 10:34 304次阅读

    Python开发者必备工具集

    这篇文章会提供一些优化代码的工具。会让代码变得更简洁,或者更迅速。 当然这些并不能代替算法设计,但是还是能让 Python 加速很多倍。 其实前面讲算法的文章,也有提到过。比如适用于双向队列
    的头像 发表于 10-16 11:14 325次阅读

    硬件经典面试100题分享

    学电人员必备;硬件经典面试100题;面向电子行业的面试基础问题,提前进入职业的大门
    发表于 09-27 06:23

    Python编程实用指南

    介绍 Python 语言的基础知识,而且还通过项目实践教会读者如何应用这些知识和技能。本书的第一部分介绍了基本的 Python 编程概念,第二部分介绍了一些不同的任务,通过编写 Python
    发表于 09-27 06:21

    不可错过!人工神经网络算法、PID算法、Python人工智能学习等资料包分享(附源代码)

    据挖掘的兵器谱。 >>>点击查看下载资料 4.python基础教程(含100例程和crossin全60课) python基础入门100例程序包含了100
    发表于 09-13 16:41

    如何在Python项目中应用分层架构

    本文来自一位 Python 开发者对一个庞大的 Python 项目的代码结构的总结。
    发表于 08-17 10:48 700次阅读
    如何在<b class='flag-5'>Python</b><b class='flag-5'>项目</b>中应用分层架构

    分享50条经典Python一行代码

    今天浩道跟大家分享python学习过程中非常经典的50条一行代码,让大家体验它简洁而功能强大的特点。同时给大家分享号主收集到的所有关于python的电子书籍,所有电子书以网盘打包,免费分享给大家学习!福利在文末喔~
    发表于 08-16 15:00 719次阅读

    如何使用Arm CMSIS-DSP实现经典机器学习库

    。 CMSIS-DSP中提供的经典ML函数仅适用于float32。 要完成本指南,您应该知道如何构建CMSIS-DSP。 您还需要安装以下资源: •CMSIS-DSP的副本。 •带有scikit-learn包的Python 3。
    发表于 08-02 07:12

    17道经典考题,检验你的Python基本功

    实际上,很多人选择学习 Python 的首要原因是其编程的优美性,用它编码和表达想法非常自然。此外,Python 的编写使用方式有多种,数据科学、网页开发、机器学习皆可使用 Python。Quora、Pinterest 和 Sp
    的头像 发表于 07-31 16:06 321次阅读
    17道<b class='flag-5'>经典</b>考题,检验你的<b class='flag-5'>Python</b>基本功