# 第五部分:文本解析
> 原文:[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