36 lines
802 B
Python
36 lines
802 B
Python
|
# module 'fnmatch' -- filename matching with shell patterns
|
||
|
|
||
|
# XXX [] patterns are not supported (but recognized)
|
||
|
|
||
|
def fnmatch(name, pat):
|
||
|
if '*' in pat or '?' in pat or '[' in pat:
|
||
|
return fnmatch1(name, pat)
|
||
|
return name = pat
|
||
|
|
||
|
def fnmatch1(name, pat):
|
||
|
for i in range(len(pat)):
|
||
|
c = pat[i]
|
||
|
if c = '*':
|
||
|
restpat = pat[i+1:]
|
||
|
if '*' in restpat or '?' in restpat or '[' in restpat:
|
||
|
for i in range(i, len(name)):
|
||
|
if fnmatch1(name[i:], restpat):
|
||
|
return 1
|
||
|
return 0
|
||
|
else:
|
||
|
return name[len(name)-len(restpat):] = restpat
|
||
|
elif c = '?':
|
||
|
if len(name) <= i : return 0
|
||
|
elif c = '[':
|
||
|
return 0 # XXX
|
||
|
else:
|
||
|
if name[i:i+1] <> c:
|
||
|
return 0
|
||
|
return 1
|
||
|
|
||
|
def fnmatchlist(names, pat):
|
||
|
res = []
|
||
|
for name in names:
|
||
|
if fnmatch(name, pat): res.append(name)
|
||
|
return res
|