fnmatch.py (860B)
1 import fnmatch as _stdlib_fnmatch 2 import os 3 from typing import Iterable, List, Text 4 5 6 __all__ = ["fnmatch", "fnmatchcase", "filter", "translate"] 7 8 9 def fnmatch(name: Text, pat: Text) -> bool: 10 name = os.path.normcase(name) 11 pat = os.path.normcase(pat) 12 return fnmatchcase(name, pat) 13 14 15 def fnmatchcase(name: Text, pat: Text) -> bool: 16 if '?' not in pat and '[' not in pat: 17 wildcards = pat.count("*") 18 if wildcards == 0: 19 return name == pat 20 elif wildcards == 1 and pat[0] == "*": 21 return name.endswith(pat[1:]) 22 elif wildcards == 1 and pat[-1] == "*": 23 return name.startswith(pat[:-1]) 24 return _stdlib_fnmatch.fnmatchcase(name, pat) 25 26 27 def filter(names: Iterable[Text], pat: Text) -> List[Text]: 28 return [n for n in names if fnmatch(n, pat)] 29 30 31 translate = _stdlib_fnmatch.translate