用Python 定位特定類型文件 - 程式人生

文章推薦指數: 80 %
投票人數:10人

import os >>> [txt for txt in os.listdir('.') if txt.endswith('.txt')] ['b.txt', ... filter:返回輸入列表中,符合特定模式的文件名列表;. 程式人生>>用Python定位特定類型文件 用Python定位特定類型文件 阿新••發佈:2019-01-02 dswmatend區分大小寫name測試串匹配查找字符定位特定文件 定位特定的文件,可以使用fnmatch以及glob這兩個標準庫,我們下面來分別看一下。

1.使用fnmatch標準庫 一般的話我們想要查找特定類型的文件,可以通過字符串的前綴匹配和後綴匹配來查找,具體實例如下所示: >>>importos >>>[txtfortxtinos.listdir(‘.‘)iftxt.endswith(‘.txt‘)] [‘b.txt‘,‘a.txt‘] 其實大部分的情況下這種用字符串匹配的方法來查找文件就足夠可以滿足需要,如果有些情況下需要更加靈活一點的字符串匹配,就可以使用fnmatch庫,這是一個專門用來進行文件名匹配的庫,支持使用通配符來進行文字匹配(比如‘*‘,‘?‘等)。

fnmatch這個庫很簡單,只有4個函數:fnmatch,fnmatchcase,filter,translate: fnmatch:判斷文件名是否符合特定的模式; fnmatchcase:判斷文件名是否符合特定的模式(不區分大小寫); filter:返回輸入列表中,符合特定模式的文件名列表; translate:將通配符模式轉換成正則表達式。

上面4個最常用是它的同名函數fnmatch,我的當前目錄下有4個文件,分別是:a.txt,b.txt,c.py,test.py,下面我就用fnmatch函數來對當前目錄下的這4個文件進行匹配性測試,具體請看下面代碼: >>>importos >>>importfnmatch >>>os.listdir(‘.‘) [‘test.py‘,‘c.py‘,‘b.txt‘,‘a.txt‘] >>>[txtfortxtinos.listdir(‘.‘)iffnmatch.fnmatch(txt,‘*.txt‘)] [‘b.txt‘,‘a.txt‘] >>>[fileforfileinos.listdir(‘.‘)iffnmatch.fnmatch(file,‘[a-c]*‘)] [‘c.py‘,‘b.txt‘,‘a.txt‘] >>>[fileforfileinos.listdir(‘.‘)iffnmatch.fnmatch(file,‘[!a-c]*‘)] [‘test.py‘] fnmatchcase函數與fnmatch函數幾乎一樣,只是在匹配的時候會忽略大小寫字母;filter函數與fnmatch比較類似,區別在於fnmatch一次只對一個文件名匹配,而filter一次可以對多個文件名進行匹配判斷,下面我們就再來看一下filter的用法: >>>importos >>>importfnmatch >>>file=os.listdir(‘.‘) >>>file [‘test.py‘,‘c.py‘,‘b.txt‘,‘a.txt‘] >>>fnmatch.filter(file,‘[a-c]*‘) [‘c.py‘,‘b.txt‘,‘a.txt‘] >>>fnmatch.filter(file,‘[!a-c]*‘) [‘test.py‘] 2.使用glob定位 我們在上面介紹的獲取特定類型的文件列表,首先是通過os.listdir獲取全部的文件列表,然後通過字符串匹配或者使用fnmatch進行文件名模式匹配來定位,習慣了Python的簡潔優雅,這多出來的一步總覺得哪裏怪怪的,好在我現在知道了glob。

glob的作用相當於os.listdir+fnmatch的組合,使用glob以後,就不需要用os.listdir獲取文件列表,直接通過模式匹配就可以解決了,具體操作如下所示: >>>importglob >>>glob.glob(‘*.txt‘) [‘b.txt‘,‘a.txt‘] >>>glob.glob(‘[a-c]*‘) [‘c.py‘,‘b.txt‘,‘a.txt‘] >>>glob.glob(‘[!a-c]*‘) [‘test.py‘] 可以看到,Python真的非常的靈活,光是定位目錄下特定的文件類型我就已經介紹了3種方式,一般情況下就用字符串匹配就可以解決,如果需要更加靈活一點的的,可以使用fnmatch和glob。

遍歷目錄樹 再上一節中我們都是查找某個目錄下的文件然後通過匹配去定位自己需要的文件類型。

但是在實際的應用過程中我們更可能遇到的是某個目錄及其子目錄下的所有文件。

比如查找某個目錄及其子目錄下所有的txt文件等等,對於這類的需求,我們可以使用os模塊下的「walk」函數。

walk函數遍歷某個目錄及其子目錄,對於每一個目錄,walk返回一個三元組,依次是「當前目錄」,「當前目錄下的子目錄」,「當前目錄下的文件列表」。

下面我們來演示一下os.walk函數的用法,做一個小的練習,來遍歷一下/root/rocky0429目錄及其子目錄下的所有txt和圖片文件: importos importfnmatch search=[‘*.txt‘,‘*.jpg‘,‘*.jpeg‘] res=[] forroot,dirnames,filenamesinos.walk(os.path.expanduser(‘~/rocky0429‘)): forextensioninsearch: forfilenameinfnmatch.filter(filenames,extension): res.append(os.path.join(root,filename)) print(res) 用Python定位特定類型文件 網站外部優化友情連結交換需要注意什麼? «上一篇 人工智能未來的發展趨勢下一篇» 相關推薦 用Python定位特定類型文件 dswmatend區分大小寫name測試串匹配查找字符定位特定文件 定位特定的文件,可以使用fnmatc... 用Python定位特定型別檔案 定位特定檔案 定位特定的檔案,可以使用fnmatch以及glob這兩個標準庫,我們下面來分別看一下。

1.使用fnmatch標準庫 一般的話... 使用數據字節流將指定範圍內的所有素數寫入整形類型文件 fileinputwrite指定pubstreamrow程序設計數據tryimportjava.io.*... 在HDFS上刪除某個路徑下特定類型的文件,比如class類型文件,比如txt類型文件 繼續是否rop後綴apitstexcstarret1、先獲取連接: publicclassUtils... 【復制指定目錄下的指定類型文件,並修改後綴名】 []rowpre封裝rayexistexceptiomaincreate packagecom.comp... sqlserver2008r2無法定位到數據庫文件目錄 srclogs子目錄數據屬性添加文件目錄無法定位ges 像這樣,選擇數據庫文件時,無法定位到文件夾目錄... Ubuntu下用命令行快速打開各類型文件(轉) manhithivelinux內核發現manualuid指定常用命令nautilus/media/pm/... 自動化測試第三節-python基礎(字符串方法數據類型文件讀寫) inpu寫入增刪改查capital返回結果move博客truextendfor循環: 1、for循環寫不... 01python基礎——python解析yaml類型文件 列表RR文件格式數字markuptoday直觀結構Oday目錄 [TOC] 一、yaml介紹 ... C#pdb類型文件的作用之一:記錄具體異常的關鍵信息,如文件路徑和行號 ==pro問題heightquantity最新當前文件的antipdb是ProgramDebugD... 搜尋 基礎教學 Mysql入門 Sql入門 Android入門 Docker入門 Go語言入門 Ruby程式入門 Python入門 Python進階 Django入門 Python爬蟲入門 最近訪問 用+Python+定位特定類型文件 wamp常見問題01——區域網手機無法訪問wamp下的網頁 AngularJs+Filter自定義過濾器控制ng-repeat去除重複 SAP+BOM物料清單詳解 Java程式設計師應該知道的20個有用的lib開源庫 ZED+stereo+camera開發入門教程(2) 【jQuery】結合accordion插件分析寫插件的方法及註意事項 XAMPP:訪問phpmyadmin出錯的解決方案 CNN+卷積神經網路--kernel、偏置值導數 有了這15款程式設計遊戲,誰都可以學程式設計!



請為這篇文章評分?