summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1991-01-01 18:17:49 (GMT)
committerGuido van Rossum <guido@python.org>1991-01-01 18:17:49 (GMT)
commit65a9620fa24d03d74c980403848faf1a47787d28 (patch)
tree6cec4eefb81b825fb5a2628c2feebca0db6a888e /Lib
parent762c39e9d28ab901393b88f641fe5fc8447baea8 (diff)
downloadcpython-65a9620fa24d03d74c980403848faf1a47787d28.zip
cpython-65a9620fa24d03d74c980403848faf1a47787d28.tar.gz
cpython-65a9620fa24d03d74c980403848faf1a47787d28.tar.bz2
Initial revision
Diffstat (limited to 'Lib')
-rw-r--r--Lib/glob.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/Lib/glob.py b/Lib/glob.py
new file mode 100644
index 0000000..8a70f0e
--- /dev/null
+++ b/Lib/glob.py
@@ -0,0 +1,44 @@
+# Module 'glob' -- filename globbing.
+
+import posix
+import path
+import fnmatch
+
+def glob(pathname):
+ if not has_magic(pathname): return [pathname]
+ dirname, basename = path.split(pathname)
+ if dirname[-1:] = '/' and dirname <> '/':
+ dirname = dirname[:-1]
+ if has_magic(dirname):
+ list = glob(dirname)
+ else:
+ list = [dirname]
+ if not has_magic(basename):
+ result = []
+ for dirname in list:
+ if basename or path.isdir(dirname):
+ name = path.cat(dirname, basename)
+ if path.exists(name):
+ result.append(name)
+ else:
+ result = []
+ for dirname in list:
+ sublist = glob1(dirname, basename)
+ for name in sublist:
+ result.append(path.cat(dirname, name))
+ return result
+
+def glob1(dirname, pattern):
+ if not dirname: dirname = '.'
+ try:
+ names = posix.listdir(dirname)
+ except posix.error:
+ return []
+ result = []
+ for name in names:
+ if name[0] <> '.' or pattern[0] = '.':
+ if fnmatch.fnmatch(name, pattern): result.append(name)
+ return result
+
+def has_magic(s):
+ return '*' in s or '?' in s or '[' in s