zoukankan      html  css  js  c++  java
  • 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]))
    
    
  • 相关阅读:
    ***CSS3 Gradient渐变色(转:http://www.w3cplus.com/content/css3-gradient)
    CSS3实现边框锯齿效果
    css3超炫8种loading加载特效
    CSS3:Transition属性详解
    WebApp之Meta标签
    css3渐变色
    转:CSS设置滚动条样式
    使用Composer安装 Laravel 和 ThinkPHP
    laravel 数据库迁移
    sublime text 3 常用插件和配置
  • 原文地址:https://www.cnblogs.com/ShawSpring/p/10549368.html
Copyright © 2011-2022 走看看