2018-11-22派森学习第4天

今天想要给ls命令添加一个查出当前文件夹下所有文件(包括子文件夹内的文件)的功能。首先在当前文件夹下新创建了一个名为“测试文件夹”的文件夹,果然,os.listdir()可以列出当前文件夹下的文件和文件夹:

图1

然后,子文件夹中如果还有子文件夹呢?这就需要用到递归,递归在以前没有学好。很重要,一定要学好。

递归的例子:

1 童谣:从前有座山

2 阶乘: 一个正整数的阶乘(英语:factorial)是所有小于或等于该数的正整数的积,并且0的阶乘为1。 

n=5测试阶乘递归

递归总结:

那么最关键的问题就是, 我们怎么找到一个问题的递归算法呢? 

Paul Graham提到, 你只需要做两件事情:

1 你必须要示范如何解决问题的一般情况, 通过将问题切分成有限小并更小的子问题。 

2 你必须要示范如何通过有限的步骤, 来解决最小的问题(基本用例)。

如果这两件事完成了, 那问题就解决了。因为递归每次都将问题变得更小, 而一个有限的问题终究会被解决的, 而最小的问题仅需几个有限的步骤就能解决。

成功实现递归取出当前文件夹下所有文件,包括子文件夹中的文件:

递归的结果及程序实现

其中if判断'.'是否在文件名中用于判断对象是文件夹or文件。

判断是文件夹or文件

现在不够完美的是,会把所有文件一股脑的打印出来,没有分是在哪个子文件夹下?

再添加一句就可以实现:

成功实现遍历出所有文件夹及目录

有一个小问题,currentpath+'/'+filename也可以正确得到结果

斜杠与反斜杠

斜杠:/

反斜杠:\

如果在路径中想使用斜杠/连接,如上图即可。如果要用反斜杠\连接,则需要用'\\',两个反斜杠,进行转义。

反斜杠\转义例1


反斜杠\转义例2

\\n中的第一个\阻止了\n转义为换行(动作),而将\n按照原样打印出来。

还有一个在字符串前加 r

'r'是防止字符转义的 如果路径中出现'\t'的话 不加r的话\t就会被转义 而加了'r'之后'\t'就能保留原有的样子。

在字符串赋值的时候 前面加'r'可以防止字符串在不需要转义的时候不被转义。

字符串前r的作用

r可以让print()函数把引号内的内容原样打印出来,及时转义字符\也失去作用。

你可能感兴趣的:(2018-11-22派森学习第4天)