1. os.listdir(path):只能返回當前path路徑下的文件和文件夾,不包含子目錄中的內容。
2. os.walk(top, topdown=True, onerror=None, followlinks=False)
參數:
- top 是你所要遍歷的目錄的地址
- topdown 為真,則優先遍歷top目錄,否則優先遍歷top的子目錄 (默認為True)
- onerror 需要一個 callable 對象,當walk需要異常時,會調用
- followlinks 如果為真,則會遍歷目錄下的快捷方式(linux 下是 symbolic link)實際所指的目錄 (默認為False)
os.walk 的返回值是一個生成器(generator),也就是說我們需要不斷的遍歷它,來獲得所有的內容。
每次遍歷的對象都是返回的是一個三元組(root,dirs,files)
- root 所指的是當前正在遍歷的這個文件夾的本身的地址
- dirs 是一個 list ,內容是該文件夾中所有的目錄的名字(不包括子目錄)
- files 同樣是 list , 內容是該文件夾中所有的文件(不包括子目錄)
如果topdown 參數為真,walk 會遍歷top文件夾,與top文件夾中每一個子目錄
練習:編寫一個程序,能在當前目錄以及當前目錄的所有子目錄下查找文件名包含指定字符串的文件,並打印出路徑。
import os import re def all_path(dirname, file_name): for maindir, subdir, file_name_list in os.walk(dirname): for f in file_name_list: apath = os.path.join(maindir, f) if re.search(file_name, f): print(apath) if __name__ == '__main__': path_name = input("請輸入要查詢的目錄:") # 不用區分大小寫 file_name = input("請輸入要查詢的文件名稱(可模糊查詢):") all_path(path_name, file_name)