glob模塊
說(shuō)明:
1、glob是python自己帶的一個(gè)文件操作相關(guān)模塊,用它可以查找符合自己目的的文件,就類(lèi)似于Windows下的文件搜索,
支持通配符操作? * 、 ? 、 [] ?這三個(gè)通配符, * 代表0個(gè)或多個(gè)字符, ? 代表一個(gè)字符, [] 匹配指定范圍內(nèi)的字符,如[0-9]匹配數(shù)字。
glob.glob("字符串+通配符")
該方法返回指定路徑所有匹配的文件的列表,該方法需要一個(gè)參數(shù)用來(lái)指定匹配的路徑字符串(本字符串可以為絕對(duì)路徑也可以為相對(duì)路徑),其返回的文件名只包括當(dāng)前目錄里的文件名,不包括子文件夾里的文件。
glob.glob(r'c:\*.txt') 我這里就是獲得C盤(pán)下的所有txt文件
glob.glob(r'E:\pic\*\*.jpg') 獲得指定目錄下的所有jpg文件
glob.glob(r'../*.py') 上一層路徑下的所有.py文件
fnmatch模塊
此模塊的主要作用是文件名稱(chēng)的匹配,fnmatch有2個(gè)比較常用的方法: fnmatch 、 filter
字符 | 含義 |
* | 匹配所有字符 |
? | 匹配單個(gè)字符 |
[seq] | 匹配指定范圍內(nèi)的字符 |
[seq] | 匹配不在指定范圍內(nèi)的字符 |
fnmatch.fnmatch(filename, patten) 測(cè)試filename,是否符合pattern
import fnmatch import os for file in os.listdir( ' . ' ): # os.listdir返回指定的文件夾包含的文件或文件夾的名字的列表 if fnmatch.fnmatch(file, ' *.py ' ): # 判斷是否有后綴為.py的文件,*代表文件名長(zhǎng)度格式不限制。 print (file)
fnmatch.filter(names, pattern) 實(shí)現(xiàn)列表特殊字符的過(guò)濾或篩選,返回符合匹配模式的字符列表,
import fnmatch filelist =[ " a.text " , " b.jpg " , " c.png " , " d.py " , ' e.text ' , " sss.py " ] print (fnmatch.filter(filelist, " ?.py " )) # 匹配前面是一個(gè)字符的.py文件 # 輸出:d.py
os的文件操作
os.path()
os.path?常用方法:
import os print (os.path.splitext( ' ./data/large.wav ' )) # 分離文件名和擴(kuò)展名 ('./data/large', '.wav') print (os.path.splitext( ' ./data/large ' )) # 分離文件名和擴(kuò)展名 ('./data/large', '') print (os.path.split( ' /root/runoob.txt ' )) # 分割文件名與路徑 ('/root', 'runoob.txt') print (os.path.join( ' root ' , ' test ' , ' runoob.txt ' )) # 將目錄和文件名合成一個(gè)路徑 root/test/runoob.txt os.path.isdir( ' d:/books/book ' ) # 判斷某一路徑是否為目錄 os.path.isfile( ' d:/books/book/book.txt ' ) # 判斷某一路徑是否為文件
創(chuàng)建目錄 os . mkdir ( path )
其參數(shù)path為要?jiǎng)?chuàng)建的目錄,但只能創(chuàng)建一級(jí)目錄,不能創(chuàng)建多級(jí)目錄。
os.mkdir(r " C:\Users\Never\Desktop\aa " ) # 在桌面創(chuàng)建一個(gè)aa目錄
刪除目錄 os.rmdir(path)
刪除一級(jí)目錄
os.rmdir( ' d:\hmm ' ) # 把D盤(pán)下的hmm的目錄刪除
創(chuàng)建多級(jí)目錄 os.makedirs(path)
創(chuàng)建多級(jí)目錄,其參數(shù)path 為要?jiǎng)?chuàng)建目錄的路徑。
os.makedirs(r " C:\Users\Never\Desktop\aa\bb " ) # 在桌面創(chuàng)建一個(gè)aa目錄,并在aa目錄中創(chuàng)建bb目錄
刪除多級(jí)目錄 os.removedirs(path)
刪除多級(jí)目錄,注意:要?jiǎng)h除的目錄必須是空目錄,即目錄沒(méi)有文件
os.removedirs( ' d:\\books\\book ' ) # 注意:要?jiǎng)h除的目錄必須是空目錄
刪除文件 os.remov(path)
os.remove( ' d:\\books\\book\\book.txt ' ) # 刪除D盤(pán)下books目錄下book目錄中的book.txt的文件
遍歷目錄 os.walk(path)
其參數(shù)path 為要遍歷的目錄,返回一個(gè)三元素的元組? (root,dirs,files)
- root 所指的是當(dāng)前正在遍歷的這個(gè)文件夾的本身的地址
- dirs 是一個(gè) list ,內(nèi)容是該文件夾中所有的目錄的名字(不包括子目錄)
- files 同樣是 list , 內(nèi)容是該文件夾中所有的文件(不包括子目錄)
如果我們有如下的文件結(jié)構(gòu):
a -> b -> 1.txt, 2 .txt c -> 3 .txt d -> 4 .txt 5.txt
for (root, dirs, files) in os.walk( ' a ' ): # 第一次運(yùn)行時(shí),當(dāng)前遍歷目錄為 a 所以 root == ' a ' dirs == [ ' b ' , ' c ' , ' d ' ] files == [ ' 4.txt ' , ' 5.txt ' ] # 接著遍歷 dirs 中的每一個(gè)目錄 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 = [] # 遍歷完畢,退出循環(huán)
綜合使用
列出一個(gè)文件夾中的所有音頻文件,把文件名存儲(chǔ)到列表中,這段代碼經(jīng)常會(huì)用到
wav_list = [] for root, dirnames, filenames in os.walk( " ./VCTK/p225 " ): for filename in fnmatch.filter(filenames, " *.wav " ): # 實(shí)現(xiàn)列表特殊字符的過(guò)濾或篩選,返回符合匹配“.wav”字符列表 wav_list.append(os.path.join(root, filename)) print (wav_list) # ['./VCTK/p225\\p225_001.wav', '/VCTK/p225\\p225_002.wav',...
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
