• Python Linux系统管理之查找文件


    一、使用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’]

  • 相关阅读:
    SpringMVC 学习笔记(四) 处理模型数据
    UE4关于Oculus Rift (VR)开发忠告
    电子商务系统的设计与实现(十三):分页组件,从前到后,从JS到Java
    2014年工作中遇到的10个问题:221-230
    2014年工作中遇到的10个问题:221-230
    公司新年第一次全员大会小记
    公司新年第一次全员大会小记
    雷观(十八):我的世界观
    雷观(十八):我的世界观
    今天烦死了,各种技术,各种问题,全栈式多屏工程师不好做啊
  • 原文地址:https://www.cnblogs.com/liujunjun/p/13475408.html
Copyright © 2020-2023  润新知