说明:
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',...
来源: https://www.cnblogs.com/LXP-Never/p/11093716.html