這4個Python實戰項目,讓你瞬間讀懂Python!

来源:https://www.cnblogs.com/Python6359/archive/2018/08/25/9535605.html
-Advertisement-
Play Games

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


這4個Python實戰項目,讓你瞬間讀懂Python!

 

前言

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

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

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

Python當下真的很火。Python實戰項目,也一直尤為關註,接下來,和大家介紹下十個Python練手的實戰項目

文章後面也給大家整理了Python很全面的資料和教程可以下載,適合正在學習Python的朋友。

python項目練習一:即時標記

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

這個項目一開始比較簡單,不過重構之後就有些複雜了,但是更靈活了。

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

先來說處理程式模塊,這個模塊的作用有兩個,一個是提供那些固定的html標記的輸出(每一個標記都有start和end),另一個是對這個標記輸出的開始和結束提供了一個友好的訪問介面。來看下程式handlers.py:

這4個Python實戰項目,讓你瞬間讀懂Python!

 

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

再來看第二個模塊“過濾器”,這個模塊更為簡單,其實就是一個正則表達式的字元串。相關代碼如下:

這4個Python實戰項目,讓你瞬間讀懂Python!

 

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

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

這4個Python實戰項目,讓你瞬間讀懂Python!

 

補充utils.py:

這4個Python實戰項目,讓你瞬間讀懂Python!

 

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

這4個Python實戰項目,讓你瞬間讀懂Python!

 

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

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

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

最後說一下我以為的這個程式的用途:

1、用來做代碼高亮分析,如果改寫成js版的話,可以做一個線上代碼編輯器。

2、可以用來學習,供我寫博文用。

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

補充一個類圖,很簡陋,但是應該能說明之間的關係。另外我還是建議如果看代碼捋不清關係最好自己畫圖,自己畫圖才能熟悉整個結構。

這4個Python實戰項目,讓你瞬間讀懂Python!

 

python項目練習二:畫幅好畫

這是《python基礎教程》中的第二個項目,關於python操作PDF

涉及到的知識點

1、urllib的使用

2、reportlab庫的使用

這個例子著實很簡單,不過我發現在python裡面可以直接在數組[]裡面寫for迴圈,真是越用越方便。

下麵是代碼:

這4個Python實戰項目,讓你瞬間讀懂Python!

 

python項目練習三:萬能的XML

這個項目的名稱與其叫做萬能的XML不如叫做自動構建網站,根據一份XML文件,生成對應目錄結構的網站,不過只有html還是太過於簡單了,如果要是可以連帶生成css那就比較強大了。這個有待後續研發,先來研究下怎麼html網站結構。 既然是通過XML結構生成網站,那所有的事情都應該由這個XML文件來。先來看下這個XML文件,website.xml:

這4個Python實戰項目,讓你瞬間讀懂Python!

 

有了這個文件,下麵應該來看怎麼通過這個文件生成網站。

首先我們要解析這個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節點(如果存在的話)。

下麵來看這部分代碼,書中的實現比較複雜,比較靈活。先來看,然後在分析。

這4個Python實戰項目,讓你瞬間讀懂Python!

 

看起來這個程式上面分析的複雜了一些,不過偉人毛毛說過,任何複雜的程式都是紙老虎。那我們再來分析一下這個程式。

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

然後再來看它多了些什麼,除了我們分析出來的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訂閱器。

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

這4個Python實戰項目,讓你瞬間讀懂Python!

 

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

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

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # 含多空格字元串的分割 hello = "hello python hello"print(a.split(" ")) # ['hello', 'python', '', 'hello'] print(hello.split()) # ['hello', 'python', 'hello']pri ...
  • eclipse的svn提交不了,報錯。提示 svn: is already locked 解決辦法:右鍵項目 Team Refresh/Cleanup ...
  • import numpy as npimport syssys.setrecursionlimit(1000) #例如這裡設置為一百萬def get1(n): if n<3: return 0 if n<6: return 3 return 6def get2(n): if n<3: return ...
  • springboot的自動配置功能,主要流程如下: 1 啟動的時候載入我們的主配置類,也就是我們的入口類;從而開啟我們的自動配置配置功能,這個是通過@EnableAutoConfiguration註解實現的; 2 @EnableautoConfiguration利用其註解類中的方法:EnableAu ...
  • 上文已經總結了AQS的前世今生,有了這個基礎我們就可以來進一步學習併發工具類。首先我們要學習的就是ReentrantLock,本文將從ReentrantLock的產生背景、源碼原理解析和應用來學習ReentrantLock這個併發工具類。 1、 產生背景 前面我們已經學習過了synchronized ...
  • 1、繼承 2、抽象類 3、綜合案例---員工類系列定義 ...
  • Python中的For迴圈 1.For迴圈語句 1.Python for迴圈可以遍歷任何序列類型,如一個列表或者一個字元串。如下代碼應該能理解,依次輸出序列元素。 2.for else語句(就是在迴圈結束後,執行else的內容) 3.for迴圈中的break語句與countinue語句(條件達成時, ...
  • 一、三元表達式的使用 name = 'alex' age = 20 if name == 'alex' else 22 print(age) 二、列表推導式(聲明式編程) l = ['alex%s' %i for i in range(10) if i > 5] print(l) 三、生成器表達式 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...