找回密码
 立即注册
搜索

4个Python实战项目,让你瞬间读懂Python


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




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







当一个重要的被称为 comp.lang.python 的 Python 旧事组在 1994 年构成时,Python 的用户基础不断增长,这为 Python 成为开源开发中最受欢迎的编程言语之一铺平了道路。




Python当下真的很火。Python实战项目,也不断尤为关注,接上去,和大家引见下Python练手的实战项目。




01

python项目练习一:即时标记




Python的实际,一方面是来熟习python的代码方式,另一方面是练习运用python中的基本的以及非基本的语法,做到游刃有余。




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




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




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



class Handler:           '''                       ''                       def callback(self,prefix,name,*args):method * getattr(self,prefix+name,None)               if callable(method):return method(*agrs)           def start(self,name):self.callback('start_',name)           def end(self,name):                self.callback('end_',name)           def sub(self,name): def substitution(match):result=self.callback('sub_’,name,math)             f result is None:match.grouo(Θ)
returnresultreturnsubstitutionclass HTMLRenderer(Handler)       ''''''             def start_document(self):
                    print '...’             def end_document(self):                     print ''             def start_paragraph(self):                     print '
'              def end_paragraph(self):                     print '
'
              def start_heading(self):                     print ''              def end_heading(self):                     print '

'              def start_list(self):                     print '
    '
                  def end_list(self):                     print '
'               def start_listitem(self):                     print ''               def end_listitem(self):                     print ''               def start_title(self):                     print '
'               def end_title(self):                     print '

'               def sub_emphasis(self,match):                     return'%s' & match.group(1)
              def sub_url(self,match):                     return'%s' % (match.group(1),match,group(1))              def feed(self.data):
printdata



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




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







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




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







总结一下:

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




看代码:







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




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




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




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

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

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




还有其他的思绪,可以留下您的一孔之见。




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







02

python项目练习二:画幅好画




第二个项目,关于python操作PDF




触及到的知识点

1. urllib的运用

2. reportlab库的运用




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




下面是代码:







03

python项目练习三:万能的XML




这个项目的称号与其叫做万能的XML不如叫做自动构建网站,根据一份XML文件,生成对应目录结构的网站,不过只要html还是太过于简单了,假如要是可以连带生成css那就比较弱小了。




这个有待后续研发,先来研讨下怎样html网站结构。 既然是经过XML结构生成网站,那一切的事情都应该由这个XML文件来。先来看下这个XML文件,website.xml:







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




首先我们要解析这个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节点(假如存在的话)。




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







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




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




然后再来看它多了些什么,除了我们分析出来的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,传参数时的星号……




04

python项目练习四:旧事聚合




第四个练习,旧事聚合。如今很少见的一类运用,至少我从来没有用过,又叫做Usenet。这个程序的次要功能是用来从指定的来源(这里是Usenet旧事组)搜集信息,然后讲这些信息保存到指定的目的文件中(这里运用了两种方式:纯文本和html文件)。这个程序的用途有些相似于如今的博客订阅工具或者叫RSS订阅器。




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




这个程序,首先从全体上停止分析,重点部分在于NewsAgent,它的作用是存储旧事来源,存储目的地址,然后在分别调用来源服务器(NNTPSource以及SimpleWebSource)以及写旧事的类(PlainDestination和HTMLDestination)。




所以从这里也看的出,NNTPSource是专门用来获取旧事服务器上的信息的,SimpleWebSource是获取一个url上的数据的。而PlainDestination和HTMLDestination的作用很分明,前者是用来输入获取到的内容到终端的,后者是写数据到html文件中的。




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




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




荐:

【中国风动漫】除了《哪吒》,这些良知国产动画也应该被更多人知道!


声明



来源:头条号,RAD极客会(ID:RAD_Geek_Club)引荐阅读,不代表RAD极客会立场,转载请注明,如触及作品版权成绩,请联络我们删除或做相关处理!

人工智能产业链联盟

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册