今天想要給ls命令添加一個查出當前文件夾下所有文件(包括子文件夾內(nèi)的文件)的功能每瞒。首先在當前文件夾下新創(chuàng)建了一個名為“測試文件夾”的文件夾,果然奏纪,os.listdir()可以列出當前文件夾下的文件和文件夾:
然后邑跪,子文件夾中如果還有子文件夾呢粉铐?這就需要用到遞歸,遞歸在以前沒有學好溺拱。很重要逃贝,一定要學好。
遞歸的例子:
1 童謠:從前有座山
2?階乘: 一個正整數(shù)的階乘(英語:factorial)是所有小于或等于該數(shù)的正整數(shù)的積迫摔,并且0的階乘為1沐扳。?
遞歸總結(jié):
那么最關(guān)鍵的問題就是, 我們怎么找到一個問題的遞歸算法呢??
Paul Graham提到, 你只需要做兩件事情:
1 你必須要示范如何解決問題的一般情況, 通過將問題切分成有限小并更小的子問題。?
2 你必須要示范如何通過有限的步驟, 來解決最小的問題(基本用例)句占。
如果這兩件事完成了, 那問題就解決了沪摄。因為遞歸每次都將問題變得更小, 而一個有限的問題終究會被解決的, 而最小的問題僅需幾個有限的步驟就能解決。
成功實現(xiàn)遞歸取出當前文件夾下所有文件纱烘,包括子文件夾中的文件:
其中if判斷'.'是否在文件名中用于判斷對象是文件夾or文件杨拐。
現(xiàn)在不夠完美的是,會把所有文件一股腦的打印出來擂啥,沒有分是在哪個子文件夾下哄陶?
再添加一句就可以實現(xiàn):
有一個小問題,currentpath+'/'+filename也可以正確得到結(jié)果:
斜杠:/
反斜杠:\
如果在路徑中想使用斜杠/連接哺壶,如上圖即可屋吨。如果要用反斜杠\連接,則需要用'\\'山宾,兩個反斜杠至扰,進行轉(zhuǎn)義。
\\n中的第一個\阻止了\n轉(zhuǎn)義為換行(動作)资锰,而將\n按照原樣打印出來敢课。
還有一個在字符串前加 r
'r'是防止字符轉(zhuǎn)義的 如果路徑中出現(xiàn)'\t'的話 不加r的話\t就會被轉(zhuǎn)義 而加了'r'之后'\t'就能保留原有的樣子。
在字符串賦值的時候 前面加'r'可以防止字符串在不需要轉(zhuǎn)義的時候不被轉(zhuǎn)義绷杜。
r可以讓print()函數(shù)把引號內(nèi)的內(nèi)容原樣打印出來直秆,及時轉(zhuǎn)義字符\也失去作用胖翰。