Kaydet (Commit) 8f0fa9e4 authored tarafından Guido van Rossum's avatar Guido van Rossum

New code for split() by Tim Peters, behaves more like posixpath.split().

üst d7b5fb85
...@@ -54,31 +54,23 @@ def splitdrive(p): ...@@ -54,31 +54,23 @@ def splitdrive(p):
# Split a path in head (everything up to the last '/') and tail (the # 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 # rest). After the trailing '/' is stripped, the invariant
# '/' is stripped. After the trailing '/' is stripped, the invariant
# join(head, tail) == p holds. # join(head, tail) == p holds.
# The resulting head won't end in '/' unless it is the root. # The resulting head won't end in '/' unless it is the root.
def split(p): def split(p):
d, p = splitdrive(p) d, p = splitdrive(p)
slashes = '' # set i to index beyond p's last slash
while p and p[-1:] in '/\\': i = len(p)
slashes = slashes + p[-1] while i and p[i-1] not in '/\\':
p = p[:-1] i = i - 1
if p == '': head, tail = p[:i], p[i:] # now tail has no slashes
p = p + slashes # remove trailing slashes from head, unless it's all slashes
head, tail = '', '' head2 = head
for c in p: while head2 and head2[-1] in '/\\':
tail = tail + c head2 = head2[:-1]
if c in '/\\': head = head2 or head
head, tail = head + tail, '' return d + 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
# Split a path in root and extension. # Split a path in root and extension.
......
...@@ -77,8 +77,7 @@ def splitdrive(p): ...@@ -77,8 +77,7 @@ def splitdrive(p):
# Split a path in head (everything up to the last '/') and tail (the # 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 # rest). After the trailing '/' is stripped, the invariant
# '/' is stripped. After the trailing '/' is stripped, the invariant
# join(head, tail) == p holds. # join(head, tail) == p holds.
# The resulting head won't end in '/' unless it is the root. # The resulting head won't end in '/' unless it is the root.
...@@ -87,24 +86,18 @@ def split(p): ...@@ -87,24 +86,18 @@ def split(p):
Return tuple (head, tail) where tail is everything after the final slash. Return tuple (head, tail) where tail is everything after the final slash.
Either part may be empty.""" Either part may be empty."""
d, p = splitdrive(p) d, p = splitdrive(p)
slashes = '' # set i to index beyond p's last slash
while p and p[-1:] in '/\\': i = len(p)
slashes = slashes + p[-1] while i and p[i-1] not in '/\\':
p = p[:-1] i = i - 1
if p == '': head, tail = p[:i], p[i:] # now tail has no slashes
p = p + slashes # remove trailing slashes from head, unless it's all slashes
head, tail = '', '' head2 = head
for c in p: while head2 and head2[-1] in '/\\':
tail = tail + c head2 = head2[:-1]
if c in '/\\': head = head2 or head
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 return d + head, tail
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment