]> granicus.if.org Git - python/commitdiff
New code for split() by Tim Peters, behaves more like posixpath.split().
authorGuido van Rossum <guido@python.org>
Fri, 19 Mar 1999 21:05:12 +0000 (21:05 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 19 Mar 1999 21:05:12 +0000 (21:05 +0000)
Lib/dospath.py
Lib/ntpath.py

index d7aa75246c2ef1fd3b7b339483095cdb3ebef7f3..bd5e560ceb99263f653191ed08543036fe491b64 100644 (file)
@@ -54,31 +54,23 @@ def splitdrive(p):
 
 
 # Split a path in head (everything up to the last '/') and tail (the
-# rest).  If the original path ends in '/' but is not the root, this
-# '/' is stripped.  After the trailing '/' is stripped, the invariant
+# rest).  After the trailing '/' is stripped, the invariant
 # join(head, tail) == p holds.
 # The resulting head won't end in '/' unless it is the root.
 
 def split(p):
-       d, p = splitdrive(p)
-       slashes = ''
-       while p and p[-1:] in '/\\':
-               slashes = slashes + p[-1]
-               p = p[:-1]
-       if p == '':
-               p = p + slashes
-       head, tail = '', ''
-       for c in p:
-               tail = tail + c
-               if c in '/\\':
-                       head, tail = head + tail, ''
-       slashes = ''
-       while head and head[-1:] in '/\\':
-               slashes = slashes + head[-1]
-               head = head[:-1]
-       if head == '':
-               head = head + slashes
-       return d + head, tail
+    d, p = splitdrive(p)
+    # set i to index beyond p's last slash
+    i = len(p)
+    while i and p[i-1] not in '/\\':
+        i = i - 1
+    head, tail = p[:i], p[i:]  # now tail has no slashes
+    # remove trailing slashes from head, unless it's all slashes
+    head2 = head
+    while head2 and head2[-1] in '/\\':
+        head2 = head2[:-1]
+    head = head2 or head
+    return d + head, tail
 
 
 # Split a path in root and extension.
index 9597c63cd3f18f057f88a787bf5087865d5093b6..a74cce3ff23e8a90e26b8424a4a744868806d818 100644 (file)
@@ -77,8 +77,7 @@ def splitdrive(p):
 
 
 # Split a path in head (everything up to the last '/') and tail (the
-# rest).  If the original path ends in '/' but is not the root, this
-# '/' is stripped.  After the trailing '/' is stripped, the invariant
+# rest).  After the trailing '/' is stripped, the invariant
 # join(head, tail) == p holds.
 # The resulting head won't end in '/' unless it is the root.
 
@@ -87,24 +86,18 @@ def split(p):
 
     Return tuple (head, tail) where tail is everything after the final slash.
     Either part may be empty."""
+
     d, p = splitdrive(p)
-    slashes = ''
-    while p and p[-1:] in '/\\':
-        slashes = slashes + p[-1]
-        p = p[:-1]
-    if p == '':
-        p = p + slashes
-    head, tail = '', ''
-    for c in p:
-        tail = tail + c
-        if c in '/\\':
-            head, tail = head + tail, ''
-    slashes = ''
-    while head and head[-1:] in '/\\':
-        slashes = slashes + head[-1]
-        head = head[:-1]
-    if head == '':
-        head = head + slashes
+    # set i to index beyond p's last slash
+    i = len(p)
+    while i and p[i-1] not in '/\\':
+        i = i - 1
+    head, tail = p[:i], p[i:]  # now tail has no slashes
+    # remove trailing slashes from head, unless it's all slashes
+    head2 = head
+    while head2 and head2[-1] in '/\\':
+        head2 = head2[:-1]
+    head = head2 or head
     return d + head, tail