patch [ 1105730 ] Faster commonprefix in macpath, ntpath, etc.

This commit is contained in:
Georg Brandl 2005-08-03 07:30:12 +00:00
parent b370059233
commit 649f8e7de2
5 changed files with 35 additions and 41 deletions

View file

@ -175,14 +175,14 @@ def lexists(path):
def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component"
if not m: return ''
prefix = m[0]
for item in m:
for i in range(len(prefix)):
if prefix[:i+1] != item[:i+1]:
prefix = prefix[:i]
if i == 0: return ''
break
return prefix
s1 = min(m)
s2 = max(m)
n = min(len(s1), len(s2))
for i in xrange(n):
if s1[i] != s2[i]:
return s1[:i]
return s1[:n]
def expandvars(path):
"""Dummy to retain interface-compatibility with other operating systems."""

View file

@ -212,14 +212,13 @@ def dirname(p):
def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component"
if not m: return ''
prefix = m[0]
for item in m:
for i in range(len(prefix)):
if prefix[:i+1] != item[:i+1]:
prefix = prefix[:i]
if i == 0: return ''
break
return prefix
s1 = min(m)
s2 = max(m)
n = min(len(s1), len(s2))
for i in xrange(n):
if s1[i] != s2[i]:
return s1[:i]
return s1[:n]
# Get size, mtime, atime of files.

View file

@ -173,14 +173,13 @@ def dirname(p):
def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component"
if not m: return ''
prefix = m[0]
for item in m:
for i in range(len(prefix)):
if prefix[:i+1] != item[:i+1]:
prefix = prefix[:i]
if i == 0: return ''
break
return prefix
s1 = min(m)
s2 = max(m)
n = min(len(s1), len(s2))
for i in xrange(n):
if s1[i] != s2[i]:
return s1[:i]
return s1[:n]
# Get size, mtime, atime of files.

View file

@ -168,23 +168,16 @@ def dirname(p):
return split(p)[0]
def commonprefix(ps):
"""
Return the longest prefix of all list elements. Purely string-based; does not
separate any path parts. Why am I in os.path?
"""
if len(ps)==0:
return ''
prefix= ps[0]
for p in ps[1:]:
prefix= prefix[:len(p)]
for i in range(len(prefix)):
if prefix[i] <> p[i]:
prefix= prefix[:i]
if i==0:
return ''
break
return prefix
def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component"
if not m: return ''
s1 = min(m)
s2 = max(m)
n = min(len(s1), len(s2))
for i in xrange(n):
if s1[i] != s2[i]:
return s1[:i]
return s1[:n]
## File access functions. Why are we in os.path?