Python如何查找特定类型文件

更新时间:2023-07-12 22:05:31 阅读: 评论:0

Python如何查找特定类型⽂件
写在之前如何腌制咸鸭蛋
今天的⽂章是介绍如何⽤ Python 去定位特定类型的⽂件,会讲到⽤字符串匹配⽂件名定位特定⽂件以及顺带介绍⼀下遍历⽬录树的函数,通过今天的这⼀部分以及之前⽂章讲到的⽂件获取属性的操作,可以做很多有意思的事情。
定位特定⽂件
定位特定的⽂件,可以使⽤ fnmatch 以及 glob 这两个标准库,我们下⾯来分别看⼀下。
1. 使⽤ fnmatch 标准库
合租屋的恋人⼀般的话我们想要查找特定类型的⽂件,可以通过字符串的前缀匹配和后缀匹配来查找,具体实例如下所⽰:
>>> import os
>>> [txt for txt in os.listdir('.') dswith('.txt')]
['b.txt', 'a.txt']
其实⼤部分的情况下这种⽤字符串匹配的⽅法来查找⽂件就⾜够可以满⾜需要,如果有些情况下需要更加灵活⼀点的字符串匹配,就可以使⽤ fnmatch 库,这是⼀个专门⽤来进⾏⽂件名匹配的库,⽀持使⽤通配符来进⾏⽂字匹配(⽐如'*','?'等)。
fnmatch 这个库很简单,只有 4 个函数:fnmatch,fnmatchca,filter,translate:
fnmatch:判断⽂件名是否符合特定的模式;
fnmatchca:判断⽂件名是否符合特定的模式(不区分⼤⼩写);
filter:返回输⼊列表中,符合特定模式的⽂件名列表;
translate:将通配符模式转换成正则表达式。
上⾯ 4 个最常⽤是它的同名函数 fnmatch ,我的当前⽬录下有 4 个⽂件,分别是:a.txt,b.txt,c.py,test.py,下⾯我就⽤fnmatch 函数来对当前⽬录下的这 4 个⽂件进⾏匹配性测试,具体请看下⾯代码:
>>> 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']
fnmatchca 函数与 fnmatch 函数⼏乎⼀样,只是在匹配的时候会忽略⼤⼩写字母;filter 函数与 fnmatch ⽐较类似,区别在于fnmatch ⼀次只对⼀个⽂件名匹配,⽽ filter ⼀次可以对多个⽂件名进⾏匹配判断,下⾯我们就再来看⼀下 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 进⾏⽂件名模式匹配来定位,习惯了 Python 的简洁优雅,这多出来的⼀步总觉得哪⾥怪怪的,好在我现在知道了glob。
glob 的作⽤相当于 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 真的⾮常的灵活,光是定位⽬录下特定的⽂件类型我就已经介绍了 3 种⽅式,⼀般情况下就⽤字符串匹配就可以解决,如果需要更加灵活⼀点的的,可以使⽤ fnmatch 和 glob。
档案袋评价
遍历⽬录树
再上⼀节中我们都是查找某个⽬录下的⽂件然后通过匹配去定位⾃⼰需要的⽂件类型。但是在实际的应⽤过程中我们更可能遇到的是某个⽬录及其⼦⽬录下的所有⽂件。⽐如查找某个⽬录及其⼦⽬录下所有的 txt ⽂件等等,对于这类的需求,我们可以使⽤ os 模块下的「walk」函数。walk 函数遍历某个⽬录及其⼦⽬录,对于每⼀个⽬录,walk 返回⼀个三元组,依次是「当前⽬录」,「当前⽬录下的⼦⽬录」,「当前⽬录下的⽂件列表」。
下⾯我们来演⽰⼀下 os.walk 函数的⽤法,做⼀个⼩的练习,来遍历⼀下 /root/rocky0429 ⽬录及其⼦⽬录下的所有 txt 和图⽚⽂件:
import os
import fnmatch
arch = ['*.txt', '*.jpg', '*.jpeg']
res = []
星巴克超大杯for root, dirnames, filenames in os.walk(pandur('~/rocky0429')):
for extension in arch:
for filename in fnmatch.filter(filenames, extension):
感恩陌生人res.append(os.path.join(root,filename))
print(res)
以上就是Python 如何查找特定类型⽂件的详细内容,更多关于python 查找⽂件的资料请关注其它相关⽂章!

本文发布于:2023-07-12 22:05:31,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1093208.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:匹配   类型   查找   字符串   函数   获取
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图