Initial revision
This commit is contained in:
parent
762c39e9d2
commit
65a9620fa2
|
@ -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
|
Loading…
Reference in New Issue