天天看點

Python:列印某個路徑下的所有檔案

列印某個路徑下的所有檔案,我們可以通過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,如需轉載請自行聯系原作者

繼續閱讀