📜  fnmatch – Python中的 Unix 文件名模式匹配

📅  最后修改于: 2022-05-13 01:54:19.218000             🧑  作者: Mango

fnmatch – Python中的 Unix 文件名模式匹配

该模块用于匹配 Unix shell 样式的通配符。 fnmatch() 将单个文件名与模式进行比较,如果匹配则返回 TRUE,否则返回 FALSE。
当操作系统使用区分大小写的文件系统时,比较区分大小写。
在 shell 风格的通配符中使用的特殊字符及其功能是:

  • '*' -匹配所有内容
  • “?” –匹配任何单个字符
  • '[seq]' -匹配 seq 中的任何字符
  • '[!seq]' -匹配任何不在 seq 中的字符

元字符应括在括号中以进行字面量匹配。例如,'[?]' 匹配字符'?'。

fnmatch 模块提供的功能

  1. fnmatch.fnmatch(filename, pattern) :此函数测试给定的文件名字符串是否与模式字符串匹配并返回一个布尔值。如果操作系统不区分大小写,则在执行比较之前,两个参数都将被标准化为全部小写或大写。

    示例:用于搜索所有以“fnmatch”开头并以“.py”结尾的文件的脚本

    # Python program to illustrate 
    # fnmatch.fnmatch(filename, pattern) 
    import fnmatch 
    import os 
      
    pattern = 'fnmatch_*.py'
    print ('Pattern :', pattern )
    print()
      
    files = os.listdir('.') 
    for name in files: 
        print ('Filename: %-25s %s' % (name, fnmatch.fnmatch(name, pattern))
    

    输出 :

    $ python fnmatch_fnmatch.py
    
    Pattern : fnmatch_*.py
    
    Filename: __init__.py               False
    Filename: fnmatch_filter.py         True
    Filename: fnmatch_fnmatch.py        True
    Filename: fnmatch_fnmatchcase.py    True
    Filename: fnmatch_translate.py      True
    Filename: index.rst                 False
    
  2. fnmatch.fnmatchcase(filename, pattern):此函数执行区分大小写的比较并测试给定的文件名字符串是否与模式字符串匹配并返回一个布尔值。

    示例:用于区分大小写比较的脚本,无论文件系统和操作系统设置如何。

    # Python program to illustrate 
    # fnmatch.fnmatchcase(filename, pattern) 
    import fnmatch 
    import os 
      
    pattern = 'FNMATCH_*.PY'
    print ('Pattern :', pattern) 
    print()
      
    files = os.listdir('.') 
      
    for name in files: 
        (print 'Filename: %-25s %s' % (name, fnmatch.fnmatchcase(name, pattern)))
    

    输出 :

    $ python fnmatch_fnmatchcase.py
    
    Pattern : FNMATCH_*.PY
    
    Filename: __init__.py               False
    Filename: fnmatch_filter.py         False
    Filename: FNMATCH_FNMATCH.PY        True
    Filename: fnmatch_fnmatchcase.py    False
    Filename: fnmatch_translate.py      False
    Filename: index.rst                 False
    
  3. fnmatch.filter(names, pattern):此函数返回与给定模式匹配的函数中传递的名称列表的子集。

    示例:按多个文件扩展名过滤文件。

    # Python program to illustrate 
    # fnmatch.filter(names, pattern) 
    import fnmatch 
    import os 
       
    pattern = 'fnmatch_*.py'
    print ('Pattern :', pattern )
       
    files = os.listdir('.') 
    print ('Files :', files) 
       
    print ('Matches :', fnmatch.filter(files, pattern))
    

    输出 :

    $ python fnmatch_filter.py
    
    Pattern : fnmatch_*.py
    Files   : ['__init__.py', 'fnmatch_filter.py', 'fnmatch_fnmatch.py', 
    'fnmatch_fnmatchcase.py', 'fnmatch_translate.py', 'index.rst']
    Matches : ['fnmatch_filter.py', 'fnmatch_fnmatch.py',
    'fnmatch_fnmatchcase.py', 'fnmatch_translate.py']
    
  4. fnmatch.translate(pattern):此函数返回转换为正则表达式的 shell 样式模式,以便与re.match()一起使用(re.match() 只会匹配字符串的开头,而不是每个字符串的开头线)。
    # Python program to illustrate 
    # fnmatch.translate(pattern) 
    import fnmatch, re 
      
    regex = fnmatch.translate('*.txt') 
    reobj = re.compile(regex) 
      
    print(regex) 
    print(reobj.match('foobar.txt')) 
    

    输出 :

    '(?s:.*\\.txt)\\Z'
    _sre.SRE_Match object; span=(0, 10), match='foobar.txt'