Guido van Rossum | 762c39e | 1991-01-01 18:11:14 +0000 | [diff] [blame] | 1 | # module 'fnmatch' -- filename matching with shell patterns |
| 2 | |
| 3 | # XXX [] patterns are not supported (but recognized) |
| 4 | |
| 5 | def fnmatch(name, pat): |
| 6 | if '*' in pat or '?' in pat or '[' in pat: |
| 7 | return fnmatch1(name, pat) |
| 8 | return name = pat |
| 9 | |
| 10 | def fnmatch1(name, pat): |
| 11 | for i in range(len(pat)): |
| 12 | c = pat[i] |
| 13 | if c = '*': |
| 14 | restpat = pat[i+1:] |
| 15 | if '*' in restpat or '?' in restpat or '[' in restpat: |
| 16 | for i in range(i, len(name)): |
| 17 | if fnmatch1(name[i:], restpat): |
| 18 | return 1 |
| 19 | return 0 |
| 20 | else: |
| 21 | return name[len(name)-len(restpat):] = restpat |
| 22 | elif c = '?': |
| 23 | if len(name) <= i : return 0 |
| 24 | elif c = '[': |
| 25 | return 0 # XXX |
| 26 | else: |
| 27 | if name[i:i+1] <> c: |
| 28 | return 0 |
| 29 | return 1 |
| 30 | |
| 31 | def fnmatchlist(names, pat): |
| 32 | res = [] |
| 33 | for name in names: |
| 34 | if fnmatch(name, pat): res.append(name) |
| 35 | return res |