1
0
mirror of https://github.com/apachecn/lmpythw-zh.git synced 2025-05-28 12:02:19 +00:00
lmpythw-zh/ex7.md
wizardforcel 213ac3c110 ex7
2017-08-03 21:33:05 +08:00

41 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 练习 7`grep`
> 原文:[Exercise 7: grep](https://learncodethehardway.org/more-python-book/ex7.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
`find`命令在 45 分钟内应该可能是一个挑战,但它是一个很好的挑战。到了这个时间,你应该可以去掉尽可能多的,阻止你开始的障碍。你可能会发现,当你清除一些障碍时,你的技能会变得更糟。例如,我以前在开始工作之前先走路去喝咖啡。这花了我大约 30分钟非常好但 30 分钟多了会变成几个小时。我决定停止这样做,但是我的工作就费劲了。原来我还需要咖啡,所以我买了一台不错的咖啡机,学会了如何制作我自己的拿铁咖啡。现在我站了起来,给自己做一杯拿铁咖啡,然后去画一些画,这让我处于创意工作的模式。
你所做的一切不都是无效的,所以要小心不要因为占用时间而消除一些东西。有一些仪式和个人习惯,可以让你的大脑准备就绪。诀窍是不要消除这些,而是​​让它们在开始工作之前更容易做。
本书的第一部分中您还应该了解时间管理的概念。设置45分钟的时间限制将使您非常清楚当您不知道需要多久做某件事的时候。只有45分钟你不能把 30 分钟浪费在调整你的 vim 窗口上,或者组织完美的目录结构,然后实现一个全新的排序算法。你必须节约你所实现的东西,以及命令你工作的东西。
处理项目的一个很好的方法是从最简单的事情开始,你可以首先配置并运行它。在`find`示例中,可以通过`glob`模块获取文件。具有较差时间管理技能的人,会立即尝试实现`-exec`参数,来证明它们是一个 NB 的程序员,但是`-exec`不能在没有-name的情况下工作而且更难实现。决定的方法是告诉自己你想要一些完成后才能使用的东西。如果45分钟之后你可以使用`-exec`,但不能获取文件,那么你如何使用它?如果同一时间之后,你得到了一种方法,来列出匹配名称的文件,那么你已经完成了。
继续处理您的障碍列表,并评估您的开始怎么样,但现在开始看看时间管理。策略化你将要做的工作,以便如果你用完了时间,你做出来了一些可以用的东西。他们不必是完整的功能,但是两个可用的功能比 10 个不可用的更好,因为你忘记了他们所需要的最简单的东西。或者更糟的是 10 个不可用的东西,因为你实现了一半,然后就跳过去了,所以所有这些都不能用。
## 挑战练习
你现在要实现`grep`命令了。像往常一样,你应该去读的`grep``man`,然后玩转它。`grep`的目的是使用正则表达式在文件中搜索文本模式。你使用`glob`模块实现了`find`这次的操作也一样但在文件中而不是在目录中完成。例如如果我想在我的书中搜索“help”这个词我可以这样做
```
grep help *.rst
```
`grep`的命令行参数相当简单。困难的部分是处理正则表达式,所以你应该依赖于`re`模块。该模块使您能够加载文件的内容,然后在里面搜索别人在命令行中提供给您的模式串。另一个提示是,您最有可能希望使用`readline`加载整个文件,而不是使用`read`。即使效率较低,`grep`的大部分选项都能更好地运行。
您可能还打算简单浏览练习 30我在那里介绍正则表达式。
## 研究性学习
+ `re`模块有什么特别的选项,使它更像`grep`吗?
+ 您可以将您的`grep`黑魔法转换成您在`find`工具中使用的模块,来添加`grep`功能吗?
## 深入学习
`re`模块是非常重要的,所以花时间去真正研究它,并且学习你能学到的任何事情。我们将在本书的另一部分中使用它以及正则表达式。