mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""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 not dirname:
 | 
						|
        return glob1(os.curdir, basename)
 | 
						|
    elif 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 []
 | 
						|
    if pattern[0]!='.':
 | 
						|
        names=filter(lambda x: x[0]!='.',names)
 | 
						|
    return fnmatch.filter(names,pattern)
 | 
						|
 | 
						|
 | 
						|
magic_check = re.compile('[*?[]')
 | 
						|
 | 
						|
def has_magic(s):
 | 
						|
    return magic_check.search(s) is not None
 |