一段基础知识介绍后,教你用代码实现Linux下的Tree命令实战
递归的概念:函数包含了对自身的调用,那么就是递归
使用的场景:如果你发现你将要做的事情就是你现在做的,那么用递归
递归类似循环;在编写或阅读递归时,首先我们关注的是递归的终止条件
递归求和
在接触递归之前,我们先来做这么一个问题:如果说,要对一个数字列表求和(或者其他序列)求和,除了我们可以使用内置的sum函数,还有什么办法?
如果你还有更优秀的办法,可以在关于页面找到我的联系方式,有偿提交给我
while循环:
for循环:
递归求和:
递归处理非线性循环
递归还可以处理一些非线性循环,而普通的循环是无法处理的
比如这样一个列表对其求和:
L = [1,[2,[3,4],5],6,[7,8]]
由于这个列表不是一个线性迭代,包含着复杂的元素嵌套
普通的循环语句处理起来将会非常难以控制
花钱递归
思考:假如你有10000块,每天花一半,毛钱直接舍弃,那么这钱可以花几天?
递归解决:
递归注意事项
递归的最大上限次数取决于当前操作系统的内存
一个没有终止条件的递归会引发错误(类似一个死循环)
这是因为递归的每一次函数执行*,都会在内存中产生新的函数副本,递归的内存消耗要大于普通循环;但是同样的,消耗了内存,效率高**于普通循环
使用os模块时,不需要考虑平台差异,解释器会帮大家选择正确的系统支持
可以对进程和进程运行环境进行管理
该模块还可以处理大部分文件系统操作,比如删除,重命名文件,遍历目录树,以及管理文件访问权限。
os模块主要有以下几种 :
posix(类unix操作系统)
nt(win)
mac(旧版本的MacOs)
dos(DOS)**
os和sys:
os负责程序与操作系统的交互
sys负责程序与解释器的交互
os.path和sys.path:
sys.path是PATH环境变量
os.path是os模块下的子模块,提供了一些关于路径处理的函数
os模块常用函数
os.name:输出字符串指示正在使用的平台
os.getcwd():得到当前工作目录(就是你的进程所工作的目录),即当前脚本工作路径
运行目录:执行程序时的路径
工作目录:程序运行时,程序中我们要操作其他文件时使用的的一系列相对路径(相对路径需要参照),工作目录可在程序运行时更改
os.listdir():返回指定目录下的所有文件和目录名的一个列表,但是并没有列出来什么是目录,什么是文件。
os.remove(‘file_name’):删除指定文件,文件不存在则报错
os.rmdir(‘dir_name’):删除指定目录
os.mkdir(‘dir_name’):创建目录
os.makedirs(‘a/b/c’):递归创建目录
os.system(‘ls’):执行shell命令
os.chdir(‘file_path’):改变工作目录
os.chmod(‘file_name’):改变文件或目录的权限
Os.path模块常用函数
返回文件或目录的绝对路径
不会检查是否存在该文件或目录
将路径分隔成目录和文件名,并以一个元组返回
不会检查是否存在该文件或目录
返回路径最后的文件名
如果后面还有\ / 那么返回一个空字符串
不会检查是否存在该文件或目录
如果路径存在,则返回True,反之返回False
与上面的函数不同,他就是检查这个路径是否存在
路径拼接
不会检查是否存在该文件或目录
判断是否为目录,返回值为bool
判断是否为文件,返回值为bool
判断是否是链接,返回值为bool
返回文件大小
如果文件不存在,抛出异常
OS模块及递归实现Tree命令
看看效果:
思考:如果你已经明白了Tree命令的实现套路,那么试试来实现一下find命令吧!
温馨提示:如果你对该段代码难以理解;再去好好看看递归
本文转自京峰教育Python金牌讲师李老师
领取专属 10元无门槛券
私享最新 技术干货