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()函数把引号内的内容原样打印出来,及时转义字符\也失去作用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,224评论 1 19
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,481评论 0 5
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,342评论 0 3
  • 小长假最后一天,看到这篇课文,很有种鞭策自己的感觉,一看作者,原来是林清玄的散文。和时间赛跑,想起了朱自清的匆匆,...
    小太阳光芒万丈ing阅读 108评论 0 0
  • 我有一个老友,很老很老的老友,现在我21岁,而我和他认识已经16年了。 在和他认识的这么多年里,我们彼此见证了彼此...
    二月二十二是星期二阅读 315评论 7 3