ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Python Linux系统管理之查找文件

2020-08-11 14:31:49  阅读:266  来源: 互联网

标签:匹配 文件名 Python glob 查找文件 jpg Linux fnmatch txt


一、使用fnmatch找到特定文件 1.建立多个文本,模拟实验内容。

touch {a..z}.txt

2.查找本文件夹中所有以”.txt”结尾的文件并以列表的形式输出。

In [1]: import os                                                                                                                                                       

In [2]: [item for item in os.listdir('.') if item.endswith('.txt')]                                                                                                     
Out[2]: 
['data1.txt',
 'data2.txt',
 'a.txt',
 'b.txt',
 'c.txt',
 'd.txt',
 'e.txt',
 'f.txt',
 'g.txt',
 'h.txt',
 'i.txt',
 'j.txt',
 'k.txt',
 'l.txt',
 'm.txt',
 'n.txt',
 'o.txt',
 'p.txt',
 'q.txt',
 'r.txt',
 's.txt',
 't.txt',
 'u.txt',
 'v.txt',
 'w.txt',
 'x.txt',
 'y.txt',
 'z.txt']

大部分情况下,使用字符串匹配查找特定的文件就能够满足需求,如果需要更佳灵活的字符串匹配,可以使用标准库fnmatch库,这个库专门用来进行文件名匹配,支持使用通配符进行字符串匹配。fnmatch支持的通配符如下所示。

* 匹配任何数量的字符
? 匹配单个字符
[seq] 匹配了seq中的字符
[!seq] 匹配除了seq以外的任何字符

fnmatch这个库比较简单,只有4个函数,分别是fnmatch、fnmatchcase、filter和translate。其中最常用的是fnmatch函数。各个函数的作用如下:

fnmatch 判断文件名是否符合特定的模式;
fnmatchcase 判断文件名是否符合特定的模式,不区分大小写;
filter 返回输入列表中,符合特定模式的文件名列表;
translate 将通配符模式转换成正则表达式。

3.创建四个文本,模拟实验环境

touch {a..b}1.txt {c..d}2.jpg

在Python代码中,使用fnmatch函数对当前目录下的4个文件进行匹配性测试,如下所示:

In [3]: import os                                                                                                                                                       

In [4]:  import fnmatch                                                                                                                                                 

In [5]: os.listdir('.')                                                                                                                                                 
Out[5]: 
['.bash_logout',
 '.bash_profile',
 '.bashrc',
 '.cshrc',
 '.tcshrc',
 'anaconda-ks.cfg',
 '.bash_history',
 '.pki',
 'v3.0.6.zip',
 'easy-rsa',
 '.rnd',
 '.pip',
 '.cache',
 '.ipython',
 'data',
 'data1.txt',
 'data2.txt',
 'a.txt',
 'b.txt',
 'c.txt',
 'd.txt',
 'e.txt',
 'f.txt',
 'g.txt',
 'h.txt',
 'i.txt',
 'j.txt',
 'k.txt',
 'l.txt',
 'm.txt',
 'n.txt',
 'o.txt',
 'p.txt',
 'q.txt',
 'r.txt',
 's.txt',
 't.txt',
 'u.txt',
 'v.txt',
 'w.txt',
 'x.txt',
 'y.txt',
 'z.txt']

In [6]:                               

 

 

fnmatchcase函数与fnmatch函数几乎一样,只是在匹配文件名时会忽略文件名中的字母大小写。filter函数与fnmatch函数比较类似,区别在于fnmatch每次对一个文件名进行匹配判断,文件名模式为第二个参数,然后以列表的形式返回输入列表中所有符合模式的文件名,如下所示:

In [1]: import os
In [2]: import fnmatch
In [3]: names = os.listdir(‘.’)
In [4]: names
Out[4]: [‘a1.txt’, ‘b1.txt’, ‘c2.jpg’, ‘d2.jpg’]
In [5]: fnmatch.filter(names,”[a-c]?.txt”)

 

Out[5]: [‘a1.txt’, ‘b1.txt’]

In [6]: fnmatch.filter(names,”[!a-c]*”)

Out[6]: [‘d2.jpg’]

二、使用glob找到特定的文件

glob的作用相当于os.listdir加上fnmatch。使用glob后,不需要调用os.listdir获取文件列表,直接通过模式匹配即可,如下所示:

In [1]: import glob
In [2]: glob.glob(‘*.txt’)
Out[2]: [‘a1.txt’, ‘b1.txt’]
In [3]: glob.glob(‘[a-c]?.jpg’)
Out[3]: [‘c2.jpg’]
In [4]: glob.glob(‘[!a-c]?.jpg’)

 

Out[4]: [‘d2.jpg’]

 

标签:匹配,文件名,Python,glob,查找文件,jpg,Linux,fnmatch,txt
来源: https://www.cnblogs.com/liujunjun/p/13475408.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有