python文件及路徑管理函數


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.path.exists(path)    # 路徑存在則返回True,路徑不存在返回False
os.path.abspath(path)   # 返回絕對路徑

創建目錄  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.remove(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 , 內容是該文件夾所有的文件

如果我們有如下的文件結構:

for (root, dirs, files) in os.walk('a'):
    # 當前要遍歷的根目錄為 a
    所以 root == 'a'
         dirs == [ 'b', 'c', 'd']
         files == [ '4.txt', '5.txt']

    # ------ 接着遍歷 dirs 中的每一個目錄 ------ #
    ### 遍歷 b
    b:  root  = 'a\\b'              # 要遍歷的目錄 b
        dirs  = []                  # 遍歷目錄中的文件夾
        files = [ '1.txt', '2.txt'] # 遍歷目錄中的文件
    
    # dirs為空,返回
    ### 遍歷 c
    c:  root  = 'a\\c'              # 要遍歷的目錄 c
        dirs  = []                  # 遍歷目錄中的文件夾
        files = [ '3.txt' ]         # 遍歷目錄中的文件
    
    PS : 如果想獲取文件的全路徑,只需要 
    for f in files:
        path = os.path.join(root,f)
    
    ### 遍歷 d
    d:  root  = 'a\\b'              # 要遍歷的目錄 d
        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',...

glob模塊

  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個比較常用的方法:fnmatchfilter

字符 含義
* 匹配所有字符
匹配單個字符
[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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM