av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python 如何查找特定類(lèi)型文件

瀏覽:3日期:2022-07-13 18:03:33

寫(xiě)在之前

今天的文章是介紹如何用 Python 去定位特定類(lèi)型的文件,會(huì)講到用字符串匹配文件名定位特定文件以及順帶介紹一下遍歷目錄樹(shù)的函數(shù),通過(guò)今天的這一部分以及之前文章講到的文件獲取屬性的操作,可以做很多有意思的事情。

定位特定文件

定位特定的文件,可以使用 fnmatch 以及 glob 這兩個(gè)標(biāo)準(zhǔn)庫(kù),我們下面來(lái)分別看一下。

1. 使用 fnmatch 標(biāo)準(zhǔn)庫(kù)

一般的話(huà)我們想要查找特定類(lèi)型的文件,可以通過(guò)字符串的前綴匹配和后綴匹配來(lái)查找,具體實(shí)例如下所示:

>>> import os>>> [txt for txt in os.listdir(’.’) if txt.endswith(’.txt’)][’b.txt’, ’a.txt’]

其實(shí)大部分的情況下這種用字符串匹配的方法來(lái)查找文件就足夠可以滿(mǎn)足需要,如果有些情況下需要更加靈活一點(diǎn)的字符串匹配,就可以使用 fnmatch 庫(kù),這是一個(gè)專(zhuān)門(mén)用來(lái)進(jìn)行文件名匹配的庫(kù),支持使用通配符來(lái)進(jìn)行文字匹配(比如’*’,’?’等)。

fnmatch 這個(gè)庫(kù)很簡(jiǎn)單,只有 4 個(gè)函數(shù):fnmatch,fnmatchcase,filter,translate:

fnmatch:判斷文件名是否符合特定的模式; fnmatchcase:判斷文件名是否符合特定的模式(不區(qū)分大小寫(xiě)); filter:返回輸入列表中,符合特定模式的文件名列表; translate:將通配符模式轉(zhuǎn)換成正則表達(dá)式。

上面 4 個(gè)最常用是它的同名函數(shù) fnmatch ,我的當(dāng)前目錄下有 4 個(gè)文件,分別是:a.txt,b.txt,c.py,test.py,下面我就用 fnmatch 函數(shù)來(lái)對(duì)當(dāng)前目錄下的這 4 個(gè)文件進(jìn)行匹配性測(cè)試,具體請(qǐng)看下面代碼:

>>> import os>>> import fnmatch>>> os.listdir(’.’)[’test.py’, ’c.py’, ’b.txt’, ’a.txt’]>>> [txt for txt in os.listdir(’.’) if fnmatch.fnmatch(txt, ’*.txt’)][’b.txt’, ’a.txt’]>>> [file for file in os.listdir(’.’) if fnmatch.fnmatch(file, ’[a-c]*’)][’c.py’, ’b.txt’, ’a.txt’]>>> [file for file in os.listdir(’.’) if fnmatch.fnmatch(file, ’[!a-c]*’)][’test.py’]

fnmatchcase 函數(shù)與 fnmatch 函數(shù)幾乎一樣,只是在匹配的時(shí)候會(huì)忽略大小寫(xiě)字母;filter 函數(shù)與 fnmatch 比較類(lèi)似,區(qū)別在于fnmatch 一次只對(duì)一個(gè)文件名匹配,而 filter 一次可以對(duì)多個(gè)文件名進(jìn)行匹配判斷,下面我們就再來(lái)看一下 filter 的用法:

>>> import os>>> import fnmatch>>> 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 定位

我們?cè)谏厦娼榻B的獲取特定類(lèi)型的文件列表,首先是通過(guò) os.listdir 獲取全部的文件列表,然后通過(guò)字符串匹配或者使用 fnmatch 進(jìn)行文件名模式匹配來(lái)定位,習(xí)慣了 Python 的簡(jiǎn)潔優(yōu)雅,這多出來(lái)的一步總覺(jué)得哪里怪怪的,好在我現(xiàn)在知道了 glob。

glob 的作用相當(dāng)于 os.listdir + fnmatch 的組合,使用 glob 以后,就不需要用 os.listdir 獲取文件列表,直接通過(guò)模式匹配就可以解決了,具體操作如下所示:

>>> import glob>>> glob.glob(’*.txt’)[’b.txt’, ’a.txt’]>>> glob.glob(’[a-c]*’)[’c.py’, ’b.txt’, ’a.txt’]>>> glob.glob(’[!a-c]*’)[’test.py’]

可以看到,Python 真的非常的靈活,光是定位目錄下特定的文件類(lèi)型我就已經(jīng)介紹了 3 種方式,一般情況下就用字符串匹配就可以解決,如果需要更加靈活一點(diǎn)的的,可以使用 fnmatch 和 glob。

遍歷目錄樹(shù)

再上一節(jié)中我們都是查找某個(gè)目錄下的文件然后通過(guò)匹配去定位自己需要的文件類(lèi)型。但是在實(shí)際的應(yīng)用過(guò)程中我們更可能遇到的是某個(gè)目錄及其子目錄下的所有文件。比如查找某個(gè)目錄及其子目錄下所有的 txt 文件等等,對(duì)于這類(lèi)的需求,我們可以使用 os 模塊下的「walk」函數(shù)。walk 函數(shù)遍歷某個(gè)目錄及其子目錄,對(duì)于每一個(gè)目錄,walk 返回一個(gè)三元組,依次是「當(dāng)前目錄」,「當(dāng)前目錄下的子目錄」,「當(dāng)前目錄下的文件列表」。

下面我們來(lái)演示一下 os.walk 函數(shù)的用法,做一個(gè)小的練習(xí),來(lái)遍歷一下 /root/rocky0429 目錄及其子目錄下的所有 txt 和 圖片文件:

import osimport fnmatchsearch = [’*.txt’, ’*.jpg’, ’*.jpeg’]res = []for root, dirnames, filenames in os.walk(os.path.expanduser(’~/rocky0429’)): for extension in search: for filename in fnmatch.filter(filenames, extension): res.append(os.path.join(root,filename)) print(res)

以上就是Python 如何查找特定類(lèi)型文件的詳細(xì)內(nèi)容,更多關(guān)于python 查找文件的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产精品伦子伦免费视频 | 性一交一乱一伧老太 | 日韩精品一区在线观看 | 亚洲综合影院 | 国产精品久久久久久久久借妻 | 成人在线一区二区 | 国产白丝精品91爽爽久久 | 亚洲另类色图 | 久久不射网 | 538精品视频 | 四虎色播 | 色在线视频| 日本高清在线观看 | 久久a级片 | 久久激情综合 | 久久久久久综合 | 天天做天天操 | 欧美成年人视频 | 成人免费高清视频 | av手机天堂 | 91手机看片 | 日韩综合在线观看 | 久草福利在线观看 | 午夜性影院 | 欧美超碰在线 | 免费一区 | 成人a在线 | 欧美精品xxx | 狠狠做深爱婷婷综合一区 | 麻豆av在线| 一级黄色片免费看 | 日韩黄色网址 | 黄色在线播放 | av网站观看| 色爽视频 | 欧美一区二区三区在线 | 久久99九九 | 国产三级一区 | 中文字幕在线免费看线人 | 高清一区二区 | 成人午夜视频在线观看 |