1. 程式人生 > >python 查找目錄下 文件名中含有某字符串的文件

python 查找目錄下 文件名中含有某字符串的文件

text int 賦值 python 查找 value ise art lam 第一次

有坑的地方: 如果代碼寫成這樣:
[( os.path.abspath(x)) for x in os.listdir(startPath) ]
此代碼只能用於當前目錄下,listdir列出的都只是文件名,然後abspath(x)對著一個文件名找絕對路徑,肯定不行,電腦裏同名的文件那麽多,你要找哪個?
同樣,isfile()也不同用於一個文件名,所以這些函數都只是對當前目錄下的操作

import os,sys
#編寫一個程序,能在某目錄以及其所有子目錄下查找文件名包含指定字符串的文件,並打印出相對路徑。

def searchFile(key,startPath = '.'):
    if not os.path.isdir(startPath):
        raise ValueError
    l= [os.path.join(startPath,x) for x in os.listdir(startPath)]  #列出所有文件的絕對路徑
    #listdir出來的相對路徑 不能用於 isfile  abspath只能用在當前目錄
    filelist=[x for x in l if os.path.isfile(x) if key in os.path.splitext(os.path.basename(x))[0]] #文件
    #只查找文件名中  不包括後綴 文件路徑
    if not hasattr(searchFile,'basePath'):#把函數當成類 添加屬性
        searchFile.basePath=startPath #只有第一次調用才會賦值給basePath
    outmap = map(lambda x:os.path.relpath(x,searchFile.basePath),filelist) #轉換成相對於初始路徑的相對路徑

    outlist = list(outmap) 

    dirlist= [x for x in l if os.path.isdir(x)]  #目錄
    for dir in dirlist:
        outlist = outlist + searchFile(key,dir)
 
    return outlist

if __name__=='__main__':
    print(searchFile(sys.argv[1]))

python 查找目錄下 文件名中含有某字符串的文件