annotate Lib/glob.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents a50df7f3a10a
children 24da035ceb6e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5242
a50df7f3a10a New doc strings.
Guido van Rossum <guido@python.org>
parents: 574
diff changeset
1 """Filename globbing utility."""
107
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
570
34a761046dbd Use module 'os'
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
3 import os
107
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 import fnmatch
574
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
5 import regex
107
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
570
34a761046dbd Use module 'os'
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
7
107
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 def glob(pathname):
5242
a50df7f3a10a New doc strings.
Guido van Rossum <guido@python.org>
parents: 574
diff changeset
9 """Return a list of paths matching a pathname pattern.
a50df7f3a10a New doc strings.
Guido van Rossum <guido@python.org>
parents: 574
diff changeset
10
a50df7f3a10a New doc strings.
Guido van Rossum <guido@python.org>
parents: 574
diff changeset
11 The pattern may contain simple shell-style wildcards a la fnmatch.
a50df7f3a10a New doc strings.
Guido van Rossum <guido@python.org>
parents: 574
diff changeset
12
a50df7f3a10a New doc strings.
Guido van Rossum <guido@python.org>
parents: 574
diff changeset
13 """
574
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
14 if not has_magic(pathname):
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
15 if os.path.exists(pathname):
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
16 return [pathname]
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
17 else:
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
18 return []
570
34a761046dbd Use module 'os'
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
19 dirname, basename = os.path.split(pathname)
107
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 if has_magic(dirname):
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 list = glob(dirname)
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 else:
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 list = [dirname]
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 if not has_magic(basename):
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 result = []
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 for dirname in list:
570
34a761046dbd Use module 'os'
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
27 if basename or os.path.isdir(dirname):
34a761046dbd Use module 'os'
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
28 name = os.path.join(dirname, basename)
34a761046dbd Use module 'os'
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
29 if os.path.exists(name):
107
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 result.append(name)
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 else:
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 result = []
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 for dirname in list:
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 sublist = glob1(dirname, basename)
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 for name in sublist:
570
34a761046dbd Use module 'os'
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
36 result.append(os.path.join(dirname, name))
107
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 return result
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 def glob1(dirname, pattern):
570
34a761046dbd Use module 'os'
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
40 if not dirname: dirname = os.curdir
107
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 try:
570
34a761046dbd Use module 'os'
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
42 names = os.listdir(dirname)
34a761046dbd Use module 'os'
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
43 except os.error:
107
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 return []
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 result = []
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 for name in names:
574
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
47 if name[0] != '.' or pattern[0] == '.':
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
48 if fnmatch.fnmatch(name, pattern):
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
49 result.append(name)
107
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 return result
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
574
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
52
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
53 magic_check = regex.compile('[*?[]')
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
54
107
1e007dccb270 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 def has_magic(s):
574
03b9f152adb6 Never return a non-existing pathname.
Guido van Rossum <guido@python.org>
parents: 570
diff changeset
56 return magic_check.search(s) >= 0