最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 如何查找特定類型文件

 更新時(shí)間:2020年08月17日 10:09:03   作者:Rocky0429  
這篇文章主要介紹了Python 如何定位特定類型文件,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

寫在之前

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

定位特定文件

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

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

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

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

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

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

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

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

>>> 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ì)忽略大小寫字母;filter 函數(shù)與 fnmatch 比較類似,區(qū)別在于fnmatch 一次只對一個(gè)文件名匹配,而 filter 一次可以對多個(gè)文件名進(jìn)行匹配判斷,下面我們就再來看一下 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 定位

我們在上面介紹的獲取特定類型的文件列表,首先是通過 os.listdir 獲取全部的文件列表,然后通過字符串匹配或者使用 fnmatch 進(jìn)行文件名模式匹配來定位,習(xí)慣了 Python 的簡潔優(yōu)雅,這多出來的一步總覺得哪里怪怪的,好在我現(xiàn)在知道了 glob。

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

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

遍歷目錄樹

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

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

import os
import fnmatch

search = ['*.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 如何查找特定類型文件的詳細(xì)內(nèi)容,更多關(guān)于python 查找文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python functools模塊學(xué)習(xí)總結(jié)

    Python functools模塊學(xué)習(xí)總結(jié)

    這篇文章主要介紹了Python functools模塊學(xué)習(xí)總結(jié),本文講解了functools.partial、functool.update_wrapper、functool.wraps、functools.reduce、functools.cmp_to_key、functools.total_ordering等方法的使用實(shí)例,需要的朋友可以參考下
    2015-05-05
  • Python?打印不帶括號的元組的實(shí)現(xiàn)

    Python?打印不帶括號的元組的實(shí)現(xiàn)

    本文主要介紹了Python?打印不帶括號的元組,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • python+opencv邊緣提取與各函數(shù)參數(shù)解析

    python+opencv邊緣提取與各函數(shù)參數(shù)解析

    這篇文章主要介紹了python+opencv邊緣提取與各函數(shù)參數(shù)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 查看keras各種網(wǎng)絡(luò)結(jié)構(gòu)各層的名字方式

    查看keras各種網(wǎng)絡(luò)結(jié)構(gòu)各層的名字方式

    這篇文章主要介紹了查看keras各種網(wǎng)絡(luò)結(jié)構(gòu)各層的名字方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python根據(jù)歐拉角求旋轉(zhuǎn)矩陣的實(shí)例

    Python根據(jù)歐拉角求旋轉(zhuǎn)矩陣的實(shí)例

    今天小編就為大家分享一篇Python根據(jù)歐拉角求旋轉(zhuǎn)矩陣的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Django框架 信號調(diào)度原理解析

    Django框架 信號調(diào)度原理解析

    這篇文章主要介紹了Django框架 信號調(diào)度原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • SQLite3中文編碼 Python的實(shí)現(xiàn)

    SQLite3中文編碼 Python的實(shí)現(xiàn)

    下面小編就為大家?guī)硪黄猄QLite3中文編碼 Python的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Python使用GitPython操作Git版本庫的方法

    Python使用GitPython操作Git版本庫的方法

    這篇文章主要介紹了Python使用GitPython操作Git版本庫的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • PyTorch平方根報(bào)錯(cuò)的處理方案

    PyTorch平方根報(bào)錯(cuò)的處理方案

    這篇文章主要介紹了PyTorch平方根報(bào)錯(cuò)的處理方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 在Pycharm中使用GitHub的方法步驟

    在Pycharm中使用GitHub的方法步驟

    這篇文章主要介紹了在Pycharm中使用GitHub的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06

最新評論

峨边| 三门峡市| 筠连县| 汝城县| 灵川县| 光泽县| 诸城市| 阿巴嘎旗| 抚宁县| 日土县| 靖远县| 阿尔山市| 柳江县| 太原市| 古蔺县| 瑞安市| 沙雅县| 饶平县| 固始县| 晋州市| 景德镇市| 南涧| 兴安盟| 长泰县| 农安县| 建阳市| 济源市| 南阳市| 平顺县| 南安市| 临漳县| 兴安盟| 察哈| 麻城市| 扶沟县| 蒲江县| 昌宁县| 柯坪县| 齐齐哈尔市| 屏南县| 黄冈市|