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',...