python檔案及路徑管理函式
阿新 • • 發佈:2019-07-01
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',...