同步操作将从 OpenHarmony-SIG/python 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
"""Filename globbing utility."""import osimport reimport fnmatchimport sys__all__ = ["glob", "iglob", "escape"]def glob(pathname, *, recursive=False):"""Return a list of paths matching a pathname pattern.The pattern may contain simple shell-style wildcards a lafnmatch. However, unlike fnmatch, filenames starting with adot are special cases that are not matched by '*' and '?'patterns.If recursive is true, the pattern '**' will match any files andzero or more directories and subdirectories."""return list(iglob(pathname, recursive=recursive))def iglob(pathname, *, recursive=False):"""Return an iterator which yields the paths matching a pathname pattern.The pattern may contain simple shell-style wildcards a lafnmatch. However, unlike fnmatch, filenames starting with adot are special cases that are not matched by '*' and '?'patterns.If recursive is true, the pattern '**' will match any files andzero or more directories and subdirectories."""sys.audit("glob.glob", pathname, recursive)it = _iglob(pathname, recursive, False)if recursive and _isrecursive(pathname):s = next(it) # skip empty stringassert not sreturn itdef _iglob(pathname, recursive, dironly):dirname, basename = os.path.split(pathname)if not has_magic(pathname):assert not dironlyif basename:if os.path.lexists(pathname):yield pathnameelse:# Patterns ending with a slash should match only directoriesif os.path.isdir(dirname):yield pathnamereturnif not dirname:if recursive and _isrecursive(basename):yield from _glob2(dirname, basename, dironly)else:yield from _glob1(dirname, basename, dironly)return# `os.path.split()` returns the argument itself as a dirname if it is a# drive or UNC path. Prevent an infinite recursion if a drive or UNC path# contains magic characters (i.e. r'\\?\C:').if dirname != pathname and has_magic(dirname):dirs = _iglob(dirname, recursive, True)else:dirs = [dirname]if has_magic(basename):if recursive and _isrecursive(basename):glob_in_dir = _glob2else:glob_in_dir = _glob1else:glob_in_dir = _glob0for dirname in dirs:for name in glob_in_dir(dirname, basename, dironly):yield os.path.join(dirname, name)# These 2 helper functions non-recursively glob inside a literal directory.# They return a list of basenames. _glob1 accepts a pattern while _glob0# takes a literal basename (so it only has to check for its existence).def _glob1(dirname, pattern, dironly):names = list(_iterdir(dirname, dironly))if not _ishidden(pattern):names = (x for x in names if not _ishidden(x))return fnmatch.filter(names, pattern)def _glob0(dirname, basename, dironly):if not basename:# `os.path.split()` returns an empty basename for paths ending with a# directory separator. 'q*x/' should match only directories.if os.path.isdir(dirname):return [basename]else:if os.path.lexists(os.path.join(dirname, basename)):return [basename]return []# Following functions are not public but can be used by third-party code.def glob0(dirname, pattern):return _glob0(dirname, pattern, False)def glob1(dirname, pattern):return _glob1(dirname, pattern, False)# This helper function recursively yields relative pathnames inside a literal# directory.def _glob2(dirname, pattern, dironly):assert _isrecursive(pattern)yield pattern[:0]yield from _rlistdir(dirname, dironly)# If dironly is false, yields all file names inside a directory.# If dironly is true, yields only directory names.def _iterdir(dirname, dironly):if not dirname:if isinstance(dirname, bytes):dirname = bytes(os.curdir, 'ASCII')else:dirname = os.curdirtry:with os.scandir(dirname) as it:for entry in it:try:if not dironly or entry.is_dir():yield entry.nameexcept OSError:passexcept OSError:return# Recursively yields relative pathnames inside a literal directory.def _rlistdir(dirname, dironly):names = list(_iterdir(dirname, dironly))for x in names:if not _ishidden(x):yield xpath = os.path.join(dirname, x) if dirname else xfor y in _rlistdir(path, dironly):yield os.path.join(x, y)magic_check = re.compile('([*?[])')magic_check_bytes = re.compile(b'([*?[])')def has_magic(s):if isinstance(s, bytes):match = magic_check_bytes.search(s)else:match = magic_check.search(s)return match is not Nonedef _ishidden(path):return path[0] in ('.', b'.'[0])def _isrecursive(pattern):if isinstance(pattern, bytes):return pattern == b'**'else:return pattern == '**'def escape(pathname):"""Escape all special characters."""# Escaping is done by wrapping any of "*?[" between square brackets.# Metacharacters do not work in the drive part and shouldn't be escaped.drive, pathname = os.path.splitdrive(pathname)if isinstance(pathname, bytes):pathname = magic_check_bytes.sub(br'[1円]', pathname)else:pathname = magic_check.sub(r'[1円]', pathname)return drive + pathname
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。