diff options
Diffstat (limited to 'lib/jython/Lib/glob.py')
-rw-r--r-- | lib/jython/Lib/glob.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/jython/Lib/glob.py b/lib/jython/Lib/glob.py new file mode 100644 index 000000000..3ddbd78c2 --- /dev/null +++ b/lib/jython/Lib/glob.py @@ -0,0 +1,57 @@ +"""Filename globbing utility."""
+
+import os
+import fnmatch
+import re
+
+__all__ = ["glob"]
+
+def glob(pathname):
+ """Return a list of paths matching a pathname pattern.
+
+ The pattern may contain simple shell-style wildcards a la fnmatch.
+
+ """
+ if not has_magic(pathname):
+ if os.path.exists(pathname):
+ return [pathname]
+ else:
+ return []
+ dirname, basename = os.path.split(pathname)
+ if has_magic(dirname):
+ list = glob(dirname)
+ else:
+ list = [dirname]
+ if not has_magic(basename):
+ result = []
+ for dirname in list:
+ if basename or os.path.isdir(dirname):
+ name = os.path.join(dirname, basename)
+ if os.path.exists(name):
+ result.append(name)
+ else:
+ result = []
+ for dirname in list:
+ sublist = glob1(dirname, basename)
+ for name in sublist:
+ result.append(os.path.join(dirname, name))
+ return result
+
+def glob1(dirname, pattern):
+ if not dirname: dirname = os.curdir
+ try:
+ names = os.listdir(dirname)
+ except os.error:
+ return []
+ result = []
+ for name in names:
+ if name[0] != '.' or pattern[0] == '.':
+ if fnmatch.fnmatch(name, pattern):
+ result.append(name)
+ return result
+
+
+magic_check = re.compile('[*?[]')
+
+def has_magic(s):
+ return magic_check.search(s) is not None
|