笨办法学 Python · 续 练习 6:`find`
练习 6:find
译者:飞龙
自豪地采用谷歌翻译
希望你正在发现阻碍自己的各种方式,甚至在你开始工作之前。也许这不是戏剧性的,但你至少应该确定你在环境中可以改善的东西,它们使你难以开始工作。这些小练习是你专注于开始的一个好方法,因为它们不是那么重要,并且能够放进一个适合你分析的时间尺度。如果这些项目有几个小时那么长,当你复查你做了什么,并做出改进的时候,你会觉得无聊,短暂的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
的功能?也许把它作为下一个星期的黑客热身挑战,来看看你能做些什么。记住,你应该试图拼凑出最好的、最丑陋的黑魔法。别担心,我不会告诉那些敏捷的人,你只是玩玩而已。