summaryrefslogtreecommitdiff
path: root/Lib/glob.py
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2013-11-18 13:06:43 +0200
committerSerhiy Storchaka <storchaka@gmail.com>2013-11-18 13:06:43 +0200
commitfd32fffa5ada8b8be8a65bd51b001d989f99a3d3 (patch)
tree2b0324a2068af8e9b1d887bb74b426ac9f12ca2b /Lib/glob.py
parente3010fd740b63df306f878fc872e29d5f6be7487 (diff)
downloadcpython-git-fd32fffa5ada8b8be8a65bd51b001d989f99a3d3.tar.gz
Issue #8402: Added the escape() function to the glob module.
Diffstat (limited to 'Lib/glob.py')
-rw-r--r--Lib/glob.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/Lib/glob.py b/Lib/glob.py
index 1a268a3ad1..e388b5f9c0 100644
--- a/Lib/glob.py
+++ b/Lib/glob.py
@@ -79,8 +79,8 @@ def glob0(dirname, basename):
return []
-magic_check = re.compile('[*?[]')
-magic_check_bytes = re.compile(b'[*?[]')
+magic_check = re.compile('([*?[])')
+magic_check_bytes = re.compile(b'([*?[])')
def has_magic(s):
if isinstance(s, bytes):
@@ -91,3 +91,15 @@ def has_magic(s):
def _ishidden(path):
return path[0] in ('.', b'.'[0])
+
+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