python文件及路径管理函数

系统 1104 0

glob模块

说明:

1、glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,就类似于Windows下的文件搜索,

支持通配符操作  * ? []  这三个通配符, * 代表0个或多个字符, ? 代表一个字符, [] 匹配指定范围内的字符,如[0-9]匹配数字。

glob.glob("字符串+通配符")

该方法返回指定路径所有匹配的文件的列表,该方法需要一个参数用来指定匹配的路径字符串(本字符串可以为绝对路径也可以为相对路径),其返回的文件名只包括当前目录里的文件名,不包括子文件夹里的文件。

glob.glob(r'c:\*.txt')       我这里就是获得C盘下的所有txt文件

glob.glob(r'E:\pic\*\*.jpg')   获得指定目录下的所有jpg文件

glob.glob(r'../*.py')       上一层路径下的所有.py文件

fnmatch模块

此模块的主要作用是文件名称的匹配,fnmatch有2个比较常用的方法: fnmatch filter

字符 含义
* 匹配所有字符
匹配单个字符
[seq] 匹配指定范围内的字符
[seq] 匹配不在指定范围内的字符

fnmatch.fnmatch(filename, patten)  测试filename,是否符合pattern

              
                import
              
              
                 fnmatch

              
              
                import
              
              
                 os

              
              
                for
              
               file 
              
                in
              
               os.listdir(
              
                '
              
              
                .
              
              
                '
              
              ): 
              
                #
              
              
                os.listdir返回指定的文件夹包含的文件或文件夹的名字的列表
              
              
                if
              
               fnmatch.fnmatch(file, 
              
                '
              
              
                *.py
              
              
                '
              
              ): 
              
                #
              
              
                判断是否有后缀为.py的文件,*代表文件名长度格式不限制。
              
              
                print
              
              (file)
            

fnmatch.filter(names, pattern)    实现列表特殊字符的过滤或筛选,返回符合匹配模式的字符列表,

              
                import
              
              
                 fnmatch
filelist
              
              =[
              
                "
              
              
                a.text
              
              
                "
              
              ,
              
                "
              
              
                b.jpg
              
              
                "
              
              ,
              
                "
              
              
                c.png
              
              
                "
              
              ,
              
                "
              
              
                d.py
              
              
                "
              
              ,
              
                '
              
              
                e.text
              
              
                '
              
              ,
              
                "
              
              
                sss.py
              
              
                "
              
              
                ]

              
              
                print
              
              (fnmatch.filter(filelist,
              
                "
              
              
                ?.py
              
              
                "
              
              )) 
              
                #
              
              
                 匹配前面是一个字符的.py文件
              
              
                
#
              
              
                 输出:d.py
              
            

os的文件操作

os.path()

os.path 常用方法:

              
                import
              
              
                 os


              
              
                print
              
              (os.path.splitext(
              
                '
              
              
                ./data/large.wav
              
              
                '
              
              ))            
              
                #
              
              
                 分离文件名和扩展名 ('./data/large', '.wav')
              
              
                print
              
              (os.path.splitext(
              
                '
              
              
                ./data/large
              
              
                '
              
              ))                
              
                #
              
              
                 分离文件名和扩展名 ('./data/large', '')
              
              
                print
              
              (os.path.split(
              
                '
              
              
                /root/runoob.txt
              
              
                '
              
              ))               
              
                #
              
              
                 分割文件名与路径 ('/root', 'runoob.txt')
              
              
                print
              
              (os.path.join(
              
                '
              
              
                root
              
              
                '
              
              ,
              
                '
              
              
                test
              
              
                '
              
              ,
              
                '
              
              
                runoob.txt
              
              
                '
              
              ))        
              
                #
              
              
                 将目录和文件名合成一个路径 root/test/runoob.txt
              
              
os.path.isdir(
              
                '
              
              
                d:/books/book
              
              
                '
              
              )                      
              
                #
              
              
                 判断某一路径是否为目录
              
              
os.path.isfile(
              
                '
              
              
                d:/books/book/book.txt
              
              
                '
              
              )            
              
                #
              
              
                 判断某一路径是否为文件
              
            

创建目录   os . mkdir ( path )

其参数path为要创建的目录,但只能创建一级目录,不能创建多级目录。

              os.mkdir(r
              
                "
              
              
                C:\Users\Never\Desktop\aa
              
              
                "
              
              )  
              
                #
              
              
                 在桌面创建一个aa目录
              
            

删除目录   os.rmdir(path)

删除一级目录

              os.rmdir(
              
                '
              
              
                d:\hmm
              
              
                '
              
              )     
              
                #
              
              
                 把D盘下的hmm的目录删除
              
            

创建多级目录  os.makedirs(path)

创建多级目录,其参数path 为要创建目录的路径。

              os.makedirs(r
              
                "
              
              
                C:\Users\Never\Desktop\aa\bb
              
              
                "
              
              )  
              
                #
              
              
                 在桌面创建一个aa目录,并在aa目录中创建bb目录
              
            

删除多级目录  os.removedirs(path)

删除多级目录,注意:要删除的目录必须是空目录,即目录没有文件

              os.removedirs(
              
                '
              
              
                d:\\books\\book
              
              
                '
              
              )    
              
                #
              
              
                 注意:要删除的目录必须是空目录
              
            

删除文件  os.remov(path)

              os.remove(
              
                '
              
              
                d:\\books\\book\\book.txt
              
              
                '
              
              )    
              
                #
              
              
                 删除D盘下books目录下book目录中的book.txt的文件
              
            

遍历目录  os.walk(path)

其参数path 为要遍历的目录,返回一个三元素的元组  (root,dirs,files)

  • root 所指的是当前正在遍历的这个文件夹的本身的地址
  • dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
  • files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)

如果我们有如下的文件结构:

                 a ->   b   ->   1.txt,  2
              
                .txt
          c   
              
              ->   3
              
                .txt
          d   
              
              ->   
        4
              
                .txt
        
              
              5.txt
            
              
                for
              
               (root, dirs, files) 
              
                in
              
               os.walk(
              
                '
              
              
                a
              
              
                '
              
              
                ):
    
              
              
                #
              
              
                第一次运行时,当前遍历目录为 a
              
              
    所以 root == 
              
                '
              
              
                a
              
              
                '
              
              
                
         dirs 
              
              == [ 
              
                '
              
              
                b
              
              
                '
              
              , 
              
                '
              
              
                c
              
              
                '
              
              , 
              
                '
              
              
                d
              
              
                '
              
              
                ]
         files 
              
              == [ 
              
                '
              
              
                4.txt
              
              
                '
              
              , 
              
                '
              
              
                5.txt
              
              
                '
              
              
                ]

    
              
              
                #
              
              
                 接着遍历 dirs 中的每一个目录
              
              
    b:  root  = 
              
                '
              
              
                a\\b
              
              
                '
              
              
                
        dirs  
              
              =
              
                 []
        files 
              
              = [ 
              
                '
              
              
                1.txt
              
              
                '
              
              , 
              
                '
              
              
                2.txt
              
              
                '
              
              
                ]
    
    
              
              
                #
              
              
                 dirs为空,返回
              
              
                #
              
              
                 遍历c
              
              
    c:  root  = 
              
                '
              
              
                a\\c
              
              
                '
              
              
                
        dirs  
              
              =
              
                 []
        files 
              
              = [ 
              
                '
              
              
                3.txt
              
              
                '
              
              
                 ]
    
    PS : 如果想获取文件的全路径,只需要 
    
              
              
                for
              
               f 
              
                in
              
              
                 files:
        path 
              
              =
              
                 os.path.join(root,f)
    
    
              
              
                #
              
              
                 遍历d
              
              
    d:  root  = 
              
                '
              
              
                a\\b
              
              
                '
              
              
                
        dirs  
              
              =
              
                 []
        files 
              
              =
              
                 []

    
              
              
                #
              
              
                 遍历完毕,退出循环
              
            

综合使用

列出一个文件夹中的所有音频文件,把文件名存储到列表中,这段代码经常会用到

              wav_list =
              
                 []

              
              
                for
              
               root, dirnames, filenames 
              
                in
              
               os.walk(
              
                "
              
              
                ./VCTK/p225
              
              
                "
              
              
                ):
    
              
              
                for
              
               filename 
              
                in
              
               fnmatch.filter(filenames, 
              
                "
              
              
                *.wav
              
              
                "
              
              ):     
              
                #
              
              
                 实现列表特殊字符的过滤或筛选,返回符合匹配“.wav”字符列表
              
              
                        wav_list.append(os.path.join(root, filename))

              
              
                print
              
              
                (wav_list)

              
              
                #
              
              
                 ['./VCTK/p225\\p225_001.wav', '/VCTK/p225\\p225_002.wav',...
              
            

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论