列印某個路徑下的所有檔案,我們可以通過find指令實作(find 路徑 -type f)。下面我通過 Python 的遞歸來實作這個功能。
[root@centos ~]# vim print_files.py
#!/usr/bin/python
import os
import sys
def print_files(path):
lsdir = os.listdir(path)
dirs = [i for i in lsdir if os.path.isdir(os.path.join(path,i))]
files = [i for i in lsdir if os.path.isfile(os.path.join(path,i))]
if files:
for f in files:
print os.path.join(path,f)
if dirs:
for d in dirs:
print_files(os.path.join(path,d))
print_files(sys.argv[1])
測試:
我們列印下/etc/目錄下的所有目錄和檔案,效果如下圖:
[root@centos ~]# python print_files.py /etc/
<a href="http://s3.51cto.com/wyfs02/M02/80/19/wKiom1c3PRLgVG1rAAA6GmB9uug525.png" target="_blank"></a>
方法說明:
os.listdir:os子產品的方法,列印目錄裡的所有檔案,以清單形式存在;後面就可以使用清單重寫:[i for i in lsdir]
os.path.isdir:os.path下的方法,傳回的是布爾值,判斷後邊是不是一個目錄。
os.path.isfile:os.path下的方法,傳回的也是布爾值,判斷後邊是不是一個檔案。
os.path.join:os.path下的方法,連接配接檔案路徑。os.path.join(path,i) :/etc/i
sys.argv:sys子產品下的方法,是用來擷取指令行參數的,sys.argv[0]表示代碼本身檔案路徑,本例:
sys.argv[0] ------- print_files.py
sys.argv[1] ------- path
邏輯思路:
(1)先列出路徑下的所有檔案
(2)過濾目錄
(3)過濾檔案
(4)判斷目錄下是否有檔案,若有就列印出該檔案
(5)判斷目錄下是否有子目錄,若有就通過遞歸再周遊子目錄下的檔案或者目錄。
本文轉自M四月天 51CTO部落格,原文連結:http://blog.51cto.com/msiyuetian/1773443,如需轉載請自行聯系原作者