# 第五部分:文本解析
> 原文:[Part V: Parsing Text](https://learncodethehardway.org/more-python-book/part4.html)
> 譯者:[飛龍](https://github.com/wizardforcel)
> 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻譯](https://translate.google.cn/)
本書的這一部分將教你如何處理文本,特別是,它是文本解析的正式開始。所以我不會涉及編程語言理論的所有不同理論元素,因為這是整個大學的學位。這只是簡單而樸素的文本解析的開始,可以在許多編程環境中使用它。
大多數程序員與解析文本有著奇怪的關系。所有計算機程序設計的核心是解析,它是計算機科學中最容易理解和形式化的方向之一。解析數據在計算中無處不在。你可以在網絡協議,編譯器,電子表格,服務器,文本編輯器,圖形渲染器,以及擁有人機或其他計算機接口的任何東西中找到它。即使兩臺計算機正在發送固定的二進制協議,盡管缺少文本,仍然存在解析的層面。
我要教你解析,因為它是一種容易理解的可靠技術,可以產生可靠的結果。當你面對可靠地處理一些輸入并給出準確的錯誤時,你將求助于解析器,而不是手動編寫一個。另外,一旦學習了解析的基礎,就會更容易學習新的編程語言,因為你可以理解他們的語法。
## 代碼覆蓋簡介
在這部分中,你仍然應該嘗試拆解和剖析你編寫的任何代碼。我在這部分中增加的新東西,是代碼覆蓋的概念。代碼覆蓋的想法是,你實際上不知道在編寫自動測試時是否測試了大多數情況。你可以使用形式邏輯來開發一個理論,即你覆蓋了一切東西,但是我們知道人類的大腦非常難以在自己的思維中找到缺陷。這就是為什么你在這本書中使用“創造然后批判”的循環。在嘗試創建某些東西的時候,你很難分析自己的想法。
代碼覆蓋是一種方法,至少能夠了解你在應用中測試的東西。它不會找到你所有的缺陷,但它至少會顯示,你已經命中每個可能的代碼分支。如果沒有覆蓋,你實際上不知道你是否測試了每個分支。一個非常好的例子是故障處理。大多數自動測試僅測試最可靠的條件,并且不會測試錯誤處理。當你運行覆蓋時,你會發現你忘記的所有方法,來測試錯誤處理代碼。
代碼覆蓋也可以幫助你避免過度測試代碼。我曾經從事測試驅動開發(TDD)愛好者的項目,他們因 12/1 的測試/代碼比而感到自豪(這意味著每一行代碼都有 12 行測試)。一個簡單的代碼覆蓋分析顯示,他們只測試了 30% 的代碼,其中許多線路以同樣的方式進行了 6~20 次的測試。同時,像數據庫查詢中的異常情況那樣的簡單錯誤是完全未經測試的,并導致頻繁的錯誤。最終,這些測試套件成為一種負擔,阻止了項目的成長,并且只會吞掉開發人員的工作安排。難怪這么多敏捷咨詢公司討厭代碼覆蓋。
在本練習的視頻中,你將看到我運行測試,并使用代碼覆蓋來確認我正在測試什么。我要求你做同樣的事情,并且有使其變得容易的工具。我將向你展示如何閱讀測試覆蓋結果,以及如何確保你高效地測試你可以測試的一切東西。目標是擁有一個徹底的自動化測試套件,但不會浪費你的努力,所以你不會連續測試 12 次只有 30% 的代碼。
- 笨辦法學 Python · 續 中文版
- 引言
- 第一部分:預備知識
- 練習 0:起步
- 練習 1:流程
- 練習 2:創造力
- 練習 3:質量
- 第二部分:簡單的黑魔法
- 練習 4:處理命令行參數
- 練習 5:cat
- 練習 6:find
- 練習 7:grep
- 練習 8:cut
- 練習 9:sed
- 練習 10:sort
- 練習 11:uniq
- 練習 12:復習
- 第三部分:數據結構
- 練習 13:單鏈表
- 練習 14:雙鏈表
- 練習 15:棧和隊列
- 練習 16:冒泡、快速和歸并排序
- 練習 17:字典
- 練習 18:性能測量
- 練習 19:改善性能
- 練習 20:二叉搜索樹
- 練習 21:二分搜索
- 練習 22:后綴數組
- 練習 23:三叉搜索樹
- 練習 24:URL 快速路由
- 第四部分:進階項目
- 練習 25:xargs
- 練習 26:hexdump
- 練習 27:tr
- 練習 28:sh
- 練習 29:diff和patch
- 第五部分:文本解析
- 練習 30:有限狀態機
- 練習 31:正則表達式
- 練習 32:掃描器
- 練習 33:解析器
- 練習 34:分析器
- 練習 35:解釋器
- 練習 36:簡單的計算器
- 練習 37:小型 BASIC
- 第六部分:SQL 和對象關系映射
- 練習 38:SQL 簡介
- 練習 39:SQL 創建
- 練習 40:SQL 讀取
- 練習 41:SQL 更新
- 練習 42:SQL 刪除
- 練習 43:SQL 管理
- 練習 44:使用 Python 的數據庫 API
- 練習 45:創建 ORM
- 第七部分:大作業
- 練習 46:blog
- 練習 47:bc
- 練習 48:ed
- 練習 49:sed
- 練習 50:vi
- 練習 51:lessweb
- 練習 52:moreweb