這十個Python實戰專案,讓你瞬間讀懂Python!
IT派 - {技術青年圈}
持續關注網際網路、區塊鏈、人工智慧領域
前言
Python 是一種極具可讀性和通用性的程式語言。Python 這個名字的靈感來自於英國喜劇團體 Monty Python,它的開發團隊有一個重要的基礎目標,就是使語言使用起來很有趣。Python 易於設定,並且是用相對直接的風格來編寫,對錯誤會提供即時反饋,對初學者而言是個很好的選擇。
Python 是一種多正規化語言,也就是說,它支援多種程式設計風格,包括指令碼和麵向物件,這使得它適用於通用目的。隨著越來越多地在工業中,被諸如聯合太空聯盟(NASA 的主要飛機支援承包商)和工業光魔(VFX 和盧卡斯影業的動畫工作室)等組織使用,Python 為那些尋求額外程式語言的人提供了巨大的潛力 。
當一個重要的被稱為 comp.lang.python 的 Python 新聞組在 1994 年形成時,Python 的使用者基礎不斷增長,這為 Python 成為開源開發中最受歡迎的程式語言之一鋪平了道路。
Python當下真的很火。Python實戰專案,也一直尤為關注,接下來,和大家介紹下十個Python練手的實戰專案
1
python專案練習一:即時標記
這是《python基礎教程》後面的實踐,照著寫寫,一方面是來熟悉python的程式碼方式,另一方面是練習使用python中的基本的以及非基本的語法,做到熟能生巧。
這個專案一開始比較簡單,不過重構之後就有些複雜了,但是更靈活了。
按照書上所說,重構之後的程式,分為四個模組:處理程式模組,過濾器模組,規則(其實應該是處理規則),語法分析器。
先來說處理程式模組,這個模組的作用有兩個,一個是提供那些固定的html標記的輸出(每一個標記都有start和end),另一個是對這個標記輸出的開始和結束提供了一個友好的訪問介面。來看下程式handlers.py:
這個程式堪稱是整個“專案”的基石所在:提供了標籤的輸出,以及字串的替換。理解起來也比較簡單。
再來看第二個模組“過濾器”,這個模組更為簡單,其實就是一個正規表示式的字串。相關程式碼如下:
這就是三個過濾器了,分別是:強調牌過濾器(用×號標出的),url牌過濾器,email牌過濾器。熟悉正規表示式的同學理解起來是沒有壓力的。
再來看第三個模組“規則”,這個模組,拋開那祖父類不說,其他類應該有的兩個方法是condition和action,前者是用來判斷讀進來的字串是不是符合自家規則,後者是用來執行操作的,所謂的執行操作就是指呼叫“處理程式模組”,輸出前標籤、內容、後標籤。 來看下這個模組的程式碼,其實這個裡面幾個類的關係,畫到類圖裡面看會比較清晰。 rules.py:
補充utils.py:
最後隆重的來看下“語法分析器模組”,這個模組的作用其實就是協調讀入的文字和其他模組的關係。在往重點說就是,提供了兩個存放“規則”和“過濾器”的列表,這麼做的好處就是使得整個程式的靈活性得到了極大的提高,使得規則和過濾器變成的熱插拔的方式,當然這個也歸功於前面在寫規則和過濾器時每一種型別的規則(過濾器)都單獨的寫成了一個類,而不是用if..else來區分。 看程式碼:
這個模組裡面的處理思路是,遍歷客戶端(也就是程式執行的入口)給插進去的所有的規則和過濾器,來處理讀進來的文字。
有一個細節的地方也要說一下,其實是和前面寫的呼應一下,就是在遍歷規則的時候通過呼叫condition這個東西來判斷是否符合當前規則。
我覺得這個程式很像是命令列模式,有空可以複習一下該模式,以保持記憶網節點的牢固性。
最後說一下我以為的這個程式的用途:
1、用來做程式碼高亮分析,如果改寫成js版的話,可以做一個線上程式碼編輯器。
2、可以用來學習,供我寫博文用。
還有其他的思路,可以留下您的真知灼見。
補充一個類圖,很簡陋,但是應該能說明之間的關係。另外我還是建議如果看程式碼捋不清關係最好自己畫圖,自己畫圖才能熟悉整個結構。
2
python專案練習二:畫幅好畫
這是《python基礎教程》中的第二個專案,關於python操作PDF
涉及到的知識點
1、urllib的使用
2、reportlab庫的使用
這個例子著實很簡單,不過我發現在python裡面可以直接在陣列[]裡面寫for迴圈,真是越用越方便。
下面是程式碼:
3
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,傳引數時的星號……
4
python專案練習四:新聞聚合
書中的第四個練習,新聞聚合。現在很少見的一類應用,至少我從來沒有用過,又叫做Usenet。這個程式的主要功能是用來從指定的來源(這裡是Usenet新聞組)收集資訊,然後講這些資訊儲存到指定的目的檔案中(這裡使用了兩種形式:純文字和html檔案)。這個程式的用處有些類似於現在的部落格訂閱工具或者叫RSS訂閱器。
先上程式碼,然後再來逐一分析:
這個程式,首先從整體上進行分析,重點部分在於NewsAgent,它的作用是儲存新聞來源,儲存目標地址,然後在分別呼叫來源伺服器(NNTPSource以及SimpleWebSource)以及寫新聞的類(PlainDestination和HTMLDestination)。所以從這裡也看的出,NNTPSource是專門用來獲取新聞伺服器上的資訊的,SimpleWebSource是獲取一個url上的資料的。而PlainDestination和HTMLDestination的作用很明顯,前者是用來輸出獲取到的內容到終端的,後者是寫資料到html檔案中的。
有了這些分析,然後在來看主程式中的內容,主程式就是來給NewsAgent新增資訊源和輸出目的地址的。
這確實是個簡單的程式,不過這個程式可是用到了分層了。
5
python專案練習五:虛擬茶話會
幾乎在學習、使用任何一種程式語言的時候,關於socket的練習從來都不會少,尤其是會寫一些區域網的通訊的東西。所以書上的這個專案剛好可以練習一下socket程式設計。
這個練習的整體思路首先有一個聊天的伺服器,這個伺服器的功能主要是提供客戶端socket的連線、儲存每個客戶端的連線session,處理每個連線傳送的訊息、解析客戶端傳送的資料。就這些,至於客戶端方面不需要寫程式碼,用系統的telnet工具即可。
我覺得有了上面的分析,剩下的這個程式就沒有什麼說的了,當然,除了那兩個把socket封裝的類之外。
自己使用python中的socket類嘗試這個編寫了一個簡單的通訊程式,不過不知為什麼,通訊中總是出現意外。這段簡單的程式碼如下:
server.py
clinet.py
這個程式出錯的原因沒有去細揪,因為python中提供了兩個封裝好的類來完成socket通訊過程:asynchat中的async_chat和asyncore中的dispatcher以及asyncore本身。前面的類是用來處理客戶端同伺服器的每一次會話,後面的類主要是用來提供socket連線服務。並且將每一個socket連線都託管給前者(async_chat)來處理。
來看程式碼:
整個程式分為我一開始說的三個部分:
相關文章
- 這4個Python實戰專案,讓你瞬間讀懂Python!Python
- python能做什麼專案-這十個Python實戰專案,讓你瞬間讀懂Python!Python
- python專案歸納總結-這4個Python實戰專案,讓你瞬間讀懂Python!Python
- 有趣的十個Python實戰專案,讓你瞬間愛上Python!Python
- 7個Python實戰專案程式碼,讓你分分鐘晉級大神!Python
- 十個Python練手的實戰專案,學會這些Python就基本沒問題了Python
- 驚爆!這些專案管理神器,讓你的工作效率瞬間翻倍!專案管理
- 十個python熱門專案,你知道幾個Python
- 32個Python爬蟲實戰專案,滿足你的專案慌Python爬蟲
- python實戰專案Python
- 7個Python實戰專案程式碼,讓你感受下大神是如何起飛的!Python
- python怎麼讀_4個Python經典專案實戰,練手必備哦!Python
- 拯救Python新手的幾個專案實戰Python
- 推薦7個Python上手實戰專案Python
- python專案例項原始碼-32個Python爬蟲實戰專案,滿足你的專案慌(帶原始碼)Python原始碼爬蟲
- python實戰一個完整的專案-年終課程盤點|16 個 Python 綜合實戰專案合集Python
- Python網路爬蟲實戰專案大全 32個Python爬蟲專案demoPython爬蟲
- python爬蟲-33個Python爬蟲專案實戰(推薦)Python爬蟲
- Jenkins部署Python專案實戰JenkinsPython
- Python專案實戰例項Python
- 推薦十大Python經典練手專案,讓你的Python技能點全亮Python
- 那些讓你頓悟的瞬間
- 19個Python爬蟲專案讓你一次吃到撐Python爬蟲
- 7個Python實戰專案程式碼,讓你30分鐘從零基礎晉級為大神!Python
- 7個Python實戰專案(附原始碼),拿走就用Python原始碼
- 吐血總結!10個Python實戰專案(附原始碼)Python原始碼
- 【Python學習實踐教程】10個Python經典專案實戰,練手必備Python
- 最新Python開發專案實戰(完整)Python
- 一輛車幫你讀懂python函式Python函式
- Python面試|一文讓你讀懂if __name__=='__main__'的含義Python面試AI
- python爬蟲實操專案_Python爬蟲開發與專案實戰 1.6 小結Python爬蟲
- 學python找不到專案練手?別擔心,70個python練手專案給你充實感Python
- 4個Python經典專案實戰,練手必備哦Python
- 最新Python教程全套合集專案實戰(完整)Python
- Python網路爬蟲實戰小專案Python爬蟲
- Python網路爬蟲實戰專案大全!Python爬蟲
- 五個引數讓你讀懂虛擬主機
- 資源整理 | 32個Python爬蟲專案讓你一次吃到撐Python爬蟲