題目:編寫一個程序,能在當前目錄以及當前目錄的所有子目錄下查找文件名包含指定字符串的文件,並打印出相對路徑
題目不難,但是初接觸Python,對函數不夠熟悉,犯了不少錯誤。總結如下:
os.path.isdir()方法應該傳入帶絕對路徑的文件名,如:r'e:\java',如果只是傳入文件名,如'java',該方法只會在當前工作目錄(可以用os.getcwd()查看)下查找有沒有同名文件夾,有則返回true
os.listdir()方法只返回文件名,需要自己用os.path.join()方法拼接出絕對路徑。
os.path.realpath()獲取絕對路徑,該方法會將傳入的文件名與當前工作目錄拼接出絕對路徑。如果要使用這個方法,必須先用os.chdir()改變當前工作目錄!建議優先用os.path.join()。
os.path.relpath()獲取相對路徑,如果不傳入命名關鍵字參數start,如start = r'C:\python',則該方法會與根據當前工作目錄計算相對路徑,目錄不同則報錯。
非遞歸版本:
import os dir = r'e:\java' specify_str = 'm' # 搜索指定目錄 results = [] folders = [dir] for folder in folders : # 把目錄下所有文件夾存入待遍歷的folders folders += [os.path.join(folder, x) for x in os.listdir(folder) \ if os.path.isdir(os.path.join(folder, x))] # 把所有滿足條件的文件的相對地址存入結果results results += [os.path.relpath(os.path.join(folder, x), start = dir) \ for x in os.listdir(folder) \ if os.path.isfile(os.path.join(folder, x)) and specify_str in x] # 輸出結果 for result in results: print(result) print('找到 %s 個結果!' % len(results))
輸出如下:
E:\java\Combination.class E:\java\Combination.java E:\java\Combination1.class E:\java\Combination1.java E:\java\FrameTest$1.class E:\java\FrameTest.class E:\java\FrameTest.java E:\java\game.jar E:\java\getNum.java E:\java\Java學習筆記.markdown E:\java\Jsq$CommandAction.class E:\java\map0.txt E:\java\MOMNum.java E:\java\MyComp.class E:\java\NumRectangle.class E:\java\NumRectangle.java E:\java\Prime E:\java\Prime.class E:\java\Prime.java E:\java\RandomCharNum.class E:\java\RandomCharNum.java E:\java\Sum.class E:\java\Sum.java E:\java\SuoDemo.class E:\java\SuoDemo.java E:\java\TestFrame.class E:\java\HomeWork\HomeWork.java E:\java\HomeWork\Thumbs.db E:\java\m個數中取k個數\Combination.class E:\java\m個數中取k個數\Combination.java E:\java\m個數中取k個數\Combination1.class E:\java\m個數中取k個數\Combination1.java E:\java\m個數中取k個數\Combination2.java E:\java\五子棋\GameFrame.class E:\java\五子棋\GameFrame.java E:\java\以往習作\KingTetris$timerListener.class E:\java\小成圖排盤\EightDiagram.java E:\java\年份轉干支\HeavenlyStem.class E:\java\年份轉干支\HeavenlyStem.java E:\java\打包\Game$1.class E:\java\打包\Game$2.class E:\java\打包\Game$MyCanvas.class E:\java\打包\Game.class 找到43個滿足條件的文件。
版權聲明:本文為博主原創文章,未經博主允許不得轉載。