適合新人練手的幾個python實戰(zhàn)項目,理解更深刻(文末附贈教程)

前言

Python當下真的很火赡麦。Python實戰(zhàn)項目盼玄,也一直尤為關(guān)注届搁,接下來缘薛,和大家介紹下十個Python練手的實戰(zhàn)項目

python項目練習一:即時標記

這是《python基礎(chǔ)教程》后面的實踐,照著寫寫卡睦,一方面是來熟悉python的代碼方式宴胧,另一方面是練習使用python中的基本的以及非基本的語法,做到熟能生巧表锻。

這個項目一開始比較簡單恕齐,不過重構(gòu)之后就有些復雜了,但是更靈活了瞬逊。

按照書上所說显歧,重構(gòu)之后的程序仪或,分為四個模塊:處理程序模塊,過濾器模塊士骤,規(guī)則(其實應該是處理規(guī)則)范删,語法分析器。

先來說處理程序模塊拷肌,這個模塊的作用有兩個瓶逃,一個是提供那些固定的html標記的輸出(每一個標記都有start和end),另一個是對這個標記輸出的開始和結(jié)束提供了一個友好的訪問接口廓块。來看下程序handlers.py:

這個程序堪稱是整個“項目”的基石所在:提供了標簽的輸出厢绝,以及字符串的替換。理解起來也比較簡單带猴。

再來看第二個模塊“過濾器”昔汉,這個模塊更為簡單,其實就是一個正則表達式的字符串拴清。相關(guān)代碼如下:

這就是三個過濾器了靶病,分別是:強調(diào)牌過濾器(用×號標出的),url牌過濾器口予,email牌過濾器娄周。熟悉正則表達式的同學理解起來是沒有壓力的。

再來看第三個模塊“規(guī)則”沪停,這個模塊煤辨,拋開那祖父類不說,其他類應該有的兩個方法是condition和action木张,前者是用來判斷讀進來的字符串是不是符合自家規(guī)則众辨,后者是用來執(zhí)行操作的,所謂的執(zhí)行操作就是指調(diào)用“處理程序模塊”舷礼,輸出前標簽鹃彻、內(nèi)容、后標簽妻献。 來看下這個模塊的代碼蛛株,其實這個里面幾個類的關(guān)系,畫到類圖里面看會比較清晰育拨。 rules.py:

補充utils.py:

總結(jié)一下:

最后隆重的來看下“語法分析器模塊”谨履,這個模塊的作用其實就是協(xié)調(diào)讀入的文本和其他模塊的關(guān)系。在往重點說就是至朗,提供了兩個存放“規(guī)則”和“過濾器”的列表屉符,這么做的好處就是使得整個程序的靈活性得到了極大的提高剧浸,使得規(guī)則和過濾器變成的熱插拔的方式锹引,當然這個也歸功于前面在寫規(guī)則和過濾器時每一種類型的規(guī)則(過濾器)都單獨的寫成了一個類矗钟,而不是用if..else來區(qū)分。 看代碼:

這個模塊里面的處理思路是嫌变,遍歷客戶端(也就是程序執(zhí)行的入口)給插進去的所有的規(guī)則和過濾器吨艇,來處理讀進來的文本。

有一個細節(jié)的地方也要說一下腾啥,其實是和前面寫的呼應一下东涡,就是在遍歷規(guī)則的時候通過調(diào)用condition這個東西來判斷是否符合當前規(guī)則。

我覺得這個程序很像是命令行模式倘待,有空可以復習一下該模式疮跑,以保持記憶網(wǎng)節(jié)點的牢固性。

最后說一下我以為的這個程序的用途:

1凸舵、用來做代碼高亮分析祖娘,如果改寫成js版的話,可以做一個在線代碼編輯器啊奄。

2渐苏、可以用來學習,供我寫博文用菇夸。

還有其他的思路琼富,可以留下您的真知灼見。

補充一個類圖庄新,很簡陋鞠眉,但是應該能說明之間的關(guān)系。另外我還是建議如果看代碼捋不清關(guān)系最好自己畫圖择诈,自己畫圖才能熟悉整個結(jié)構(gòu)凡蚜。

python項目練習二:畫幅好畫

這是《python基礎(chǔ)教程》中的第二個項目,關(guān)于python操作PDF

涉及到的知識點

1吭从、urllib的使用

2朝蜘、reportlab庫的使用

這個例子著實很簡單,不過我發(fā)現(xiàn)在python里面可以直接在數(shù)組[]里面寫for循環(huán)涩金,真是越用越方便谱醇。

下面是代碼:

python項目練習三:萬能的XML

這個項目的名稱與其叫做萬能的XML不如叫做自動構(gòu)建網(wǎng)站,根據(jù)一份XML文件步做,生成對應目錄結(jié)構(gòu)的網(wǎng)站副渴,不過只有html還是太過于簡單了,如果要是可以連帶生成css那就比較強大了全度。這個有待后續(xù)研發(fā)煮剧,先來研究下怎么html網(wǎng)站結(jié)構(gòu)。 既然是通過XML結(jié)構(gòu)生成網(wǎng)站,那所有的事情都應該由這個XML文件來勉盅。先來看下這個XML文件佑颇,website.xml:

有了這個文件,下面應該來看怎么通過這個文件生成網(wǎng)站草娜。

首先我們要解析這個xml文件挑胸,python解析xml和在java中一樣,有兩種方式宰闰,SAX和DOM茬贵,兩種處理方式不同點在于速度和范圍,前者講究的是效率移袍,每次只處理文檔的一小部分解藻,快速而能有效的利用內(nèi)存,后者是相反的處理方式葡盗,先把所有的文檔載入到內(nèi)存舆逃,然后再進行處理,速度比較慢戳粒,也比較消耗內(nèi)存路狮,唯一的好處就是可以操作整個文檔。

在python中使用sax方式處理xml要先引入xml.sax中的parse函數(shù)蔚约,還有xml.sax.handler中的ContentHandler奄妨,后面的這個類是要和parse函數(shù)來配合使用的。使用方式如下: parse('xxx.xml',xxxHandler),這里面的xxxHandler要繼承上面的ContentHandler苹祟,不過只要繼承就行砸抛,不需要有所作為。 然后這個parse函數(shù)在處理xml文件的時候树枫,會調(diào)用xxxHandler中的startElement函數(shù)和endElement函數(shù)來一個xml中的標簽的開始和結(jié)束直焙,中間的過程使用一個名為characters的函數(shù)來處理標簽內(nèi)部的所有字符串。

有了上面的這些認識砂轻,我們已經(jīng)知道如何處理xml文件了奔誓,然后再來看那個罪惡的源頭website.xml文件,分析其結(jié)構(gòu)搔涝,只有兩個節(jié)點:page和directory厨喂,很明顯page表示一個頁面,directory表示一個目錄庄呈。

所以處理這個xml文件的思路就變的清晰了蜕煌。讀取xml文件的每一個節(jié)點,然后判斷是page還是directory如果是page則創(chuàng)建html頁面诬留,然后把節(jié)點中的內(nèi)容寫到文件里斜纪。如果遇到directory就創(chuàng)建一個文件夾贫母,然后再處理其內(nèi)部的page節(jié)點(如果存在的話)。

下面來看這部分代碼盒刚,書中的實現(xiàn)比較復雜腺劣,比較靈活。先來看伪冰,然后在分析。

看起來這個程序上面分析的復雜了一些樟蠕,不過偉人毛毛說過贮聂,任何復雜的程序都是紙老虎。那我們再來分析一下這個程序寨辩。

首先看到這個程序是有兩個類吓懈,其實完全可以當作一個類,因為有了繼承靡狞。

然后再來看它多了些什么耻警,除了我們分析出來的startElement和endElement以及characters,多出來了startPage甸怕,endPage;startDirectory甘穿,endDirectory;defaultStart,defaultEnd;ensureDirectory;writeHeader梢杭,writeFooter;和dispatch温兼,這些個函數(shù)。除了dispatch武契,前面的函數(shù)都很好理解募判,每一對函數(shù)都是單純的處理對應的html標簽以及xml節(jié)點。而dispatch比較復雜咒唆,復雜之處在于他是用來動態(tài)拼合函數(shù)并且進行執(zhí)行的届垫。

dispatch的處理思路是,首先根據(jù)傳遞的參數(shù)(就是操作名稱以及節(jié)點名稱)判斷是否存在對應的函數(shù)如startPage全释,如果不存在則執(zhí)行default+操作名稱:如defaultStart装处。

一個函數(shù)一個函數(shù)搞清楚之后,就知道整個處理流程是什么樣了浸船。首先創(chuàng)建一個public_html的文件符衔,存放整個網(wǎng)站,然后讀xml的節(jié)點糟袁,通過startElement和endElement調(diào)用dispatch進行處理判族。然后就是dispatch怎么調(diào)用具體的處理函數(shù)了。 到此為止项戴,這個項目算是分析完了形帮。

主要掌握的內(nèi)容一個是python中使用SAX處理XML,另一個就是python中的函數(shù)的使用,比如getattr辩撑,傳參數(shù)時的星號……

python項目練習四:新聞聚合

書中的第四個練習界斜,新聞聚合。現(xiàn)在很少見的一類應用合冀,至少我從來沒有用過各薇,又叫做Usenet。這個程序的主要功能是用來從指定的來源(這里是Usenet新聞組)收集信息君躺,然后講這些信息保存到指定的目的文件中(這里使用了兩種形式:純文本和html文件)峭判。這個程序的用處有些類似于現(xiàn)在的博客訂閱工具或者叫RSS訂閱器。

先上代碼棕叫,然后再來逐一分析:

這個程序林螃,首先從整體上進行分析,重點部分在于NewsAgent俺泣,它的作用是存儲新聞來源疗认,存儲目標地址,然后在分別調(diào)用來源服務器(NNTPSource以及SimpleWebSource)以及寫新聞的類(PlainDestination和HTMLDestination)伏钠。所以從這里也看的出横漏,NNTPSource是專門用來獲取新聞服務器上的信息的,SimpleWebSource是獲取一個url上的數(shù)據(jù)的熟掂。而PlainDestination和HTMLDestination的作用很明顯绊茧,前者是用來輸出獲取到的內(nèi)容到終端的,后者是寫數(shù)據(jù)到html文件中的打掘。

有了這些分析华畏,然后在來看主程序中的內(nèi)容,主程序就是來給NewsAgent添加信息源和輸出目的地址的尊蚁。

最后亡笑,想學習Python的小伙伴們:

這里有我自己整理了一套最新的python系統(tǒng)學習教程,包括從基礎(chǔ)的python腳本到web開發(fā)横朋、爬蟲仑乌、數(shù)據(jù)分析、數(shù)據(jù)可視化琴锭、機器學習等晰甚。送給正在學習python的小伙伴!這里是python學習者聚集地决帖,歡迎初學和進階中的小伙伴厕九!

來V性公粽號:“速學Python”,拿Python學習資料

python學習資料
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末地回,一起剝皮案震驚了整個濱河市扁远,隨后出現(xiàn)的幾起案子俊鱼,更是在濱河造成了極大的恐慌,老刑警劉巖畅买,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件并闲,死亡現(xiàn)場離奇詭異,居然都是意外死亡谷羞,警方通過查閱死者的電腦和手機帝火,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湃缎,“玉大人犀填,你說我怎么就攤上這事⊙愀瑁” “怎么了宏浩?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵知残,是天一觀的道長靠瞎。 經(jīng)常有香客問我,道長求妹,這世上最難降的妖魔是什么乏盐? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮制恍,結(jié)果婚禮上父能,老公的妹妹穿的比我還像新娘。我一直安慰自己净神,他們只是感情好何吝,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鹃唯,像睡著了一般爱榕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坡慌,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天黔酥,我揣著相機與錄音,去河邊找鬼洪橘。 笑死跪者,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的熄求。 我是一名探鬼主播渣玲,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弟晚!你這毒婦竟也來了柜蜈?” 一聲冷哼從身側(cè)響起仗谆,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淑履,沒想到半個月后隶垮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡秘噪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年狸吞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片指煎。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹋偏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出至壤,到底是詐尸還是另有隱情威始,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布像街,位于F島的核電站黎棠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏镰绎。R本人自食惡果不足惜脓斩,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畴栖。 院中可真熱鬧随静,春花似錦、人聲如沸吗讶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽照皆。三九已至重绷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纵寝,已是汗流浹背论寨。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留爽茴,地道東北人葬凳。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像室奏,于是被迫代替她去往敵國和親火焰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容