一個完整的python程序



概述

  這部分主要是通過一些較大型的腳本來結束對python系統接口的學習,可以了解到python面向對象編程和代碼復用等開發模式的支持。


一、尋找python標准庫目錄中的最大的庫文件

任務實現邏輯:
(1)獲取輸入參數
(2)使用glob模塊掃描目錄下的文件
(3)獲取文件的大小,並放入列表中
(4)大小排序,輸出目標值


在指定目錄樹范圍內找到最大的文件
如果目標是多個目錄嵌套而成,需要掃描目錄樹,可以使用os.walk()函數。


可能出現的異常處理情況
(1)統一路徑表示的差異情況,windows采用反斜杠。
(2)統一目錄名稱小大寫的情況,windows不注重大小寫的差異。
(3)跳過文件操作的異常,譬如獲取文件的大小的調用錯誤等。
(4)二進制模式打開文件避免編解碼錯誤。


掃描整台機器
(1)繞過不能解碼的文件或目錄名
(2)使用文件生成器和迭代器處理文件,避免內存使用問題和阻塞問題(逐行讀取)。

打印Unicode文件名
(1)使用os.listdir()可以以兩種不同方式返回文件,傳入str時得到的是解碼之后的str字符串,而傳入bytes則是靜態編碼的字節字符串。
(2)在os.walk(b'xx')函數中傳入字節字符串即可。
(3)由於文件名的解碼錯誤出現在打印階段,所以可以通過傳入編碼方法解決解碼產生的錯誤,如print(dir.encode())。
(4)還可以將腳本的輸出重定向到腳本,可避免該問題,因為這就不涉及到字符解碼的問題了,python程序處理中只存在字節狀態。

 

二、分割和合並文件

分割任務實現邏輯:
(1)處理出入參數的問題,因為該操作涉及的輸入和輸出內容比較多。
(2)文件切割操作,按照字節數讀取,避免文本模式下讀寫產生的文件數據損壞,尤其是二進制文件。
(3)文件的打開和關閉操作,需嚴謹的處理,盡可能手動關閉。

合並任務實現邏輯:
(1)獲取輸入條件,需要合並的目錄和文件。
(2)文件讀取時,采用指定文件塊大小讀取,類似於流式讀取比較高效。
(3)文件名排序的問題,依賴於設計時文件名的設置。


三、生成重定向網頁

任務實現邏輯:
(1)使用os.listdir遍歷站點目錄下的所有文件名。
(2)使用字符串對象replace方法來執行全局搜索和替換操作。
(3)將替換完的文本內容寫入預設好的文件中。

 

四、一個回歸測試腳本

運行邏輯:
(1)收集指定測試腳本目錄,遍歷目錄獲取文件列表。
(2)從Input和Args子目錄獲取腳本輸入和命令行參數。
(3)在Output子目錄中為所有正常退出的測試生成最初的stdout輸出文件。
(4)通過退出狀態代碼或stderr中的錯誤消息報告測試結果。

python自帶的兩個測試框架doctest,unittest。


五、復制目錄樹

任務實現邏輯:
(1)編寫文件內容拷貝函數,使用二進制讀寫。
(2)編寫文件信息收集(路徑)函數,以及目標目錄樹的構建。
(3)輸入信息檢查和校驗。


六、比較目錄樹

任務實現邏輯:
(1)輸入參數收集和處理
(2)收集比較的兩個目錄中的文件列表。
(3)根據上一步驟的輸出結果進行比較。

比較目錄樹中文件內容的差異性,需要添加以下邏輯:
(1)相同文件名的話先校驗下內容的一致性,譬如MD5值比較。
(2)文件讀取逐個字符的進行比較。


七、搜索目錄樹

實現類似grep、find、glob命令的功能
實現邏輯:
(1)使用os.walk函數遍歷目錄。
(2)使用字符串模式匹配遍歷結果。

 

八、訪問器:目錄遍歷"++"

在頻繁的使用編碼目錄的各種形式之后,我們需要將這些需求進行歸類和整理:
(1)冗余性,通過把共有的細節部分封裝起來重復使用以簡化遍歷操作。
(2)可擴展性,考慮腳本的可擴展使用能力,提供可復制,更通用,可定制和復用的辦法。
(3)封裝性,將程序與其實現的細節盡量隔離開,即使os.walk就隔離了內部遍歷的過程,但這個接口還是容易隨時間而改變。

使用OOP編程技巧切入目錄樹搜索操作
(1)編寫Filevisitor類,包含run方法運行主要運行邏輯,調用各種抽象的方法來描述業務處理流程。
(2)編寫繼承於Filevisitor類,定制更加細節的邏輯部分實現擴展功能。


九、播放媒體文件

實現邏輯:
(1)識別媒體文件類型
(2)收集媒體文件與對應系統媒體播放程序之間的對應關系
(3)調用系統程序打開對應的媒體文件

webbrowser模塊
  根據指定的URL啟動網頁瀏覽器
mimetypes模塊
  根據文件的名稱來識別文件的類型

 

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM