1
0
mirror of https://github.com/apachecn/lmpythw-zh.git synced 2025-05-31 05:27:43 +00:00
lmpythw-zh/ex6.md
wizardforcel 1ed7e3a7c4 ex6
2017-08-03 11:33:01 +08:00

62 lines
5.6 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.

# 练习 6`find`
> 原文:[Exercise 6: find](https://learncodethehardway.org/more-python-book/ex6.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
希望你正在发现阻碍自己的各种方式甚至在你开始工作之前。也许这不是戏剧性的但你至少应该确定你在环境中可以改善的东西它们使你难以开始工作。这些小练习是你专注于开始的一个好方法因为它们不是那么重要并且能够放进一个适合你分析的时间尺度。如果这些项目有几个小时那么长当你复查你做了什么并做出改进的时候你会觉得无聊短暂的45分钟的项目是你可以记录和非常快速审查的东西。
这是我在学习中使用的一种模式。我会识别我需要改进的东西,例如我如何开始,或者我如何使用一个工具。然后我会设计一个练习来关注它。当我正在学习画画时,我外出并努力画树。我坐下来看着问题,我发现的第一件事就是我拖住了太多的东西。我也把我所有的东西都放在我公寓附近的随机的地方。我为我的绘画用品购买了一个特定的包,并保持这个包是准备好的。当我想在外面画画时,我拿起这个包,走到几个地方之一,而不是精心规划到哪里绘画。我练习拿起我的包,走到两个地方之一,准备好,画一幅画,然后回家,直到我像丝绸一样平滑。之后我看了 Bob Ross 的作品,弄清如何画树,因为这个家伙可以很快画出来很多树。
这是你应该做的。很多人在他们的工作领域浪费时间和精力。你是否有一个专门的工作场所,永远不会改变吗?我放弃了我的笔记本电脑,现在只需要使用台式机,这样我就可以在一致的地方做我的工作。这也让我的背部和颈部不用拖着这块金属,给了我更大的工作屏幕,都提高了我的工作能力。在这个练习中,我希望你专注于你的工作领域,并确保在开始之前准备好:
+ 你有足够的光线吗?你需要更少的光线吗?
+ 你的椅子怎么样?你需要一个更好的键盘吗?
+ 还有什么其他工具妨碍你了?你在 Windows 机器上尝试执行 Unix 的东西吗?试图在 Linux 上做 Mac 的东西?不要去买一台新电脑,但是如果你发现你想要做的事情太多,那么请考虑花一笔大的开销。
+ 你的桌子怎么样?你有没有一个?你整天都在咖啡馆使用可怕的椅子和咖啡吗?
+ 音乐怎么样?你听带歌词的音乐吗?我发现如果我听音乐没有歌词,我更容易专注于我的头脑中的声音,帮助我写作或编程。
+ 你在开放式办公室工作,你的同事烦人吗?去买一双盖过耳朵的大耳机。当你戴着它们时,很明显你没有投入注意力,所以人们会离开你,比起你插上耳机而他们看不见,这样他们会觉得更温和一些。这也会阻止分心,并帮助你集中精力。
用这个练习来思考这样的主题,并试图简化和改善你的环境。有一件事 - 不要花很多钱买奇奇怪怪的工具。只需确定问题,然后尝试找到解决方法。
## 挑战练习
在这个挑战中,你要实现用于查找文件的`find`工具的基本版本。像这样运行`find`
```
find . -name "*.txt" -print
```
这将搜索当前目录中以`.txt`结尾的每个文件,并将其打印出来。 `find`的命令行参数数量很多所以你不应该在45分钟内实现它们。`find`的一般格式是:
+ 开始搜索的目录:`.``/usr/local/`
+ 一个过滤器参数,如`-name``-type d`(目录类型的文件)。
+ 对每个找到的文件执行的操作:`-print`
你可以执行有用的操作例如在每个找到的文件上执行命令。如果要删除主目录中的每个Ruby文件可以执行以下操作
```
find . -name "*.rb" -exec rm {} \;
```
请不要运行它,除非意识到它会删除所有以`.rb`结尾的文件。`-exec`参数需要一个命令,将`{}`的任何实例替换为文件的名称,然后碰到`;`(分号)时停止读取命令。在前面的命令中我们使用`\;`,因为 bash 和许多其他 shell 使用`;`(分号)作为他们的语言的一部分,所以我们必须转义它。
这个练习将真正测试你使用`argparse``sys.argv`的能力。我建议你运行`man`找到参数列表,然后尝试使用`find`来确定你将要实现什么参数。你只有45分钟所以你可能不会实现太多但是`-name``-type`,以及`-print``-exec`是必不可少的。`-exec`参数将是一个挑战,所以将它保存到最后。
当你实现它的时候,尝试找到可以为你做的工作的库。你一定要查看`subprocess`模块和`glob`模块。同时要更仔细地查看`os`模块。
## 研究性学习
+ 你实现了多少`find`的功能?
+ 你发现用于改进这个实现的库是什么?
+ 你将库的查找计算在45分钟内了吗你可以说开始 Hack 之前的研究并不算在内这样做完全没有问题。如果你想要额外的挑战那么就将你的研究包括在45分钟内。
## 深入学习
你可以在 45 分钟的 Hack 内实现多少`find`的功能?也许把它作为下一个星期的黑客热身挑战,来看看你能做些什么。记住,你应该试图拼凑出最好的、最丑陋的黑魔法。别担心,我不会告诉那些敏捷的人,你只是玩玩而已。