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

有坑的地方: 若是代码写成这样: [( 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]))
相关文章
相关标签/搜索