blob: bacaf183e1f6bd0fa681c292d9f21c0124f2a3aa [file] [log] [blame]
Guido van Rossum65a96201991-01-01 18:17:49 +00001# Module 'glob' -- filename globbing.
2
Guido van Rossumbba77af1992-01-12 23:26:24 +00003import os
Guido van Rossum65a96201991-01-01 18:17:49 +00004import fnmatch
Guido van Rossumc2ef5c21992-01-12 23:32:11 +00005import regex
Guido van Rossum65a96201991-01-01 18:17:49 +00006
Guido van Rossumbba77af1992-01-12 23:26:24 +00007
Guido van Rossum65a96201991-01-01 18:17:49 +00008def glob(pathname):
Guido van Rossumc2ef5c21992-01-12 23:32:11 +00009 if not has_magic(pathname):
10 if os.path.exists(pathname):
11 return [pathname]
12 else:
13 return []
Guido van Rossumbba77af1992-01-12 23:26:24 +000014 dirname, basename = os.path.split(pathname)
Guido van Rossum65a96201991-01-01 18:17:49 +000015 if has_magic(dirname):
16 list = glob(dirname)
17 else:
18 list = [dirname]
19 if not has_magic(basename):
20 result = []
21 for dirname in list:
Guido van Rossumbba77af1992-01-12 23:26:24 +000022 if basename or os.path.isdir(dirname):
23 name = os.path.join(dirname, basename)
24 if os.path.exists(name):
Guido van Rossum65a96201991-01-01 18:17:49 +000025 result.append(name)
26 else:
27 result = []
28 for dirname in list:
29 sublist = glob1(dirname, basename)
30 for name in sublist:
Guido van Rossumbba77af1992-01-12 23:26:24 +000031 result.append(os.path.join(dirname, name))
Guido van Rossum65a96201991-01-01 18:17:49 +000032 return result
33
34def glob1(dirname, pattern):
Guido van Rossumbba77af1992-01-12 23:26:24 +000035 if not dirname: dirname = os.curdir
Guido van Rossum65a96201991-01-01 18:17:49 +000036 try:
Guido van Rossumbba77af1992-01-12 23:26:24 +000037 names = os.listdir(dirname)
38 except os.error:
Guido van Rossum65a96201991-01-01 18:17:49 +000039 return []
40 result = []
41 for name in names:
Guido van Rossumc2ef5c21992-01-12 23:32:11 +000042 if name[0] != '.' or pattern[0] == '.':
43 if fnmatch.fnmatch(name, pattern):
44 result.append(name)
Guido van Rossum65a96201991-01-01 18:17:49 +000045 return result
46
Guido van Rossumc2ef5c21992-01-12 23:32:11 +000047
48magic_check = regex.compile('[*?[]')
49
Guido van Rossum65a96201991-01-01 18:17:49 +000050def has_magic(s):
Guido van Rossumc2ef5c21992-01-12 23:32:11 +000051 return magic_check.search(s) >= 0