4個Python經典項目實戰,練手必備哦!

Python是一種極具可讀性和通用性的編程語言。Python這個名字的靈感來自於英國喜劇團體Monty Python,它的開發團隊有一個重要的基礎目標,就是使語言使用起來頗有趣。Python易於設置,而且是用相對直接的風格來編寫,對錯誤會提供即時反饋,對初學者而言是個很好的選擇。css

Python是一種多範式語言,也就是說,它支持多種編程風格,包括腳本和麪向對象,這使得它適用於通用目的。隨着愈來愈多地在工業中,被諸如聯合太空聯盟(NASA的主要飛機支持承包商)和工業光魔(VFX 和盧卡斯影業的動畫工做室)等組織使用,Python 爲那些尋求額外編程語言的人提供了巨大的潛力 。html

 

 

當一個重要的被稱爲comp.lang.python的Python新聞組在1994年造成時,Python 的用戶基礎不斷增加,這爲Python成爲開源開發中最受歡迎的編程語言之一鋪平了道路。python

Python當下真的很火。Python實戰項目,也一直尤其關注,接下來,和你們介紹下Python練手的實戰項目。web

Python項目練習一:即時標記正則表達式

這是《Python基礎教程》後面的實踐,照着寫寫,一方面是來熟悉Python的代碼方式,另外一方面是練習使用Python中的基本的以及非基本的語法,作到熟能生巧。編程

這個項目一開始比較簡單,不太重構以後就有些複雜了,可是更靈活了。數組

按照書上所說,重構以後的程序,分爲四個模塊:處理程序模塊,過濾器模塊,規則(其實應該是處理規則),語法分析器。服務器

先來講處理程序模塊,這個模塊的做用有兩個,一個是提供那些固定的html標記的輸出(每個標記都有start和end),另外一個是對這個標記輸出的開始和結束提供了一個友好的訪問接口。來看下程序handlers.py:編程語言


 

這個程序堪稱是整個「項目」的基石所在:提供了標籤的輸出,以及字符串的替換。理解起來也比較簡單。編輯器

再來看第二個模塊「過濾器」,這個模塊更爲簡單,其實就是一個正則表達式的字符串。相關代碼以下:


 

這就是三個過濾器了,分別是:強調牌過濾器(用×號標出的),url牌過濾器,email牌過濾器。熟悉正則表達式的同窗理解起來是沒有壓力的。

再來看第三個模塊「規則」,這個模塊,拋開那祖父類不說,其餘類應該有的兩個方法是condition和action,前者是用來判斷讀進來的字符串是否是符合自家規則,後者是用來執行操做的,所謂的執行操做就是指調用「處理程序模塊」,輸出前標籤、內容、後標籤。 來看下這個模塊的代碼,其實這個裏面幾個類的關係,畫到類圖裏面看會比較清晰。 rules.py:


 

補充utils.py:


 

若是你在學習Python的過程當中碰見了不少疑問和難題,能夠加-q-u-n 227 -435-450裏面有軟件視頻資料免費

總結一下:

最後隆重的來看下「語法分析器模塊」,這個模塊的做用其實就是協調讀入的文本和其餘模塊的關係。在往重點說就是,提供了兩個存放「規則」和「過濾器」的列表,這麼作的好處就是使得整個程序的靈活性獲得了極大的提升,使得規則和過濾器變成的熱插拔的方式,固然這個也歸功於前面在寫規則和過濾器時每一種類型的規則(過濾器)都單獨的寫成了一個類,而不是用if..else來區分。 看代碼:


 

這個模塊裏面的處理思路是,遍歷客戶端(也就是程序執行的入口)給插進去的全部的規則和過濾器,來處理讀進來的文本。

有一個細節的地方也要說一下,實際上是和前面寫的呼應一下,就是在遍歷規則的時候經過調用condition這個東西來判斷是否符合當前規則。

我以爲這個程序很像是命令行模式,有空能夠複習一下該模式,以保持記憶網節點的牢固性。

最後說一下我覺得的這個程序的用途:

一、用來作代碼高亮分析,若是改寫成js版的話,能夠作一個在線代碼編輯器。

二、能夠用來學習,供我寫博文用。

還有其餘的思路,能夠留下您的真知灼見。

補充一個類圖,很簡陋,可是應該能說明之間的關係。另外我仍是建議若是看代碼捋不清關係最好本身畫圖,本身畫圖才能熟悉整個結構。


 

Python項目練習二:畫幅好畫

這是《Python基礎教程》中的第二個項目,關於Python操做PDF,涉及到的知識點:

一、urllib的使用

二、reportlab庫的使用

這個例子着實很簡單,不過我發如今Python裏面能夠直接在數組[]裏面寫for循環,真是越用越方便。

下面是代碼:


 

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,傳參數時的星號……

python項目練習四:新聞聚合

書中的第四個練習,新聞聚合。如今不多見的一類應用,至少我歷來沒有用過,又叫作Usenet。這個程序的主要功能是用來從指定的來源(這裏是Usenet新聞組)收集信息,而後講這些信息保存到指定的目的文件中(這裏使用了兩種形式:純文本和html文件)。這個程序的用處有些相似於如今的博客訂閱工具或者叫RSS訂閱器。

先上代碼,而後再來逐一分析:


 

這個程序,首先從總體上進行分析,重點部分在於NewsAgent,它的做用是存儲新聞來源,存儲目標地址,而後在分別調用來源服務器(NNTPSource以及SimpleWebSource)以及寫新聞的類(PlainDestination和HTMLDestination)。因此從這裏也看的出,NNTPSource是專門用來獲取新聞服務器上的信息的,SimpleWebSource是獲取一個url上的數據的。而PlainDestination和HTMLDestination的做用很明顯,前者是用來輸出獲取到的內容到終端的,後者是寫數據到html文件中的。

有了這些分析,而後在來看主程序中的內容,主程序就是來給NewsAgent添加信息源和輸出目的地址的。

這確實是個簡單的程序,不過這個程序但是用到了分層了。

相關文章
相關標籤/搜索