<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Martin v. Löwis wrote:
<blockquote cite="mid45ED83A4.80604@v.loewis.de" type="cite">
<pre wrap="">Ok - now I'm confused: do you consider this behavior
(splitext('.pythonrc') == ('', '.pythonrc')) correct
or not?
</pre>
</blockquote>
<br>
+1 on the behavior. However, the patch is special-casing a leading
dot; it would still fail on splitext(".."). If we're gonna fix the
bug, I'd rather we fixed it dead.<br>
<br>
What follows is a cross-platform splitext(). It passes all the tests I
threw at it, also attached. If there is interest, I would be happy to
submit it as an alternate patch. If runtime speed is paramount, I
could lose the portability, and instead port my patch into all three
*path.py files natively (dropping os.sep and os.altsep).<br>
<br>
Hope this helps,<br>
<br>
<br>
<i>larry</i><br>
----------<br>
import os<br>
<br>
def splitext(f):<br>
sepIndex = f.rfind(os.sep)<br>
if os.altsep:<br>
altsepIndex = f.rfind(os.altsep)<br>
sepIndex = max(sepIndex, altsepIndex)<br>
<br>
dotIndex = f.rfind(".")<br>
if dotIndex > sepIndex:<br>
# skip all leading dots<br>
filenameIndex = sepIndex + 1<br>
while filenameIndex < dotIndex:<br>
if f[filenameIndex] != '.':<br>
return f[:dotIndex], f[dotIndex:]<br>
filenameIndex += 1<br>
<br>
return f, ''<br>
<br>
<br>
def splitextTest(path, filename, ext):<br>
assert splitext(path) == (filename, ext)<br>
assert splitext(os.sep + path) == (os.sep + filename, ext)<br>
assert splitext("abc" + os.sep + path) == ("abc" + os.sep + filename,
ext)<br>
assert splitext("abc.def" + os.sep + path) == ("abc.def" + os.sep +
filename, ext)<br>
if os.altsep:<br>
assert splitext(os.altsep + path) == (os.altsep + filename, ext)<br>
assert splitext("abc" + os.altsep + path) == ("abc" + os.altsep +
filename, ext)<br>
assert splitext("abc.def" + os.altsep + path) == ("abc.def" +
os.altsep + filename, ext)<br>
<br>
<br>
splitextTest("foo.bar", "foo", ".bar")<br>
splitextTest("foo.boo.bar", "foo.boo", ".bar")<br>
splitextTest("foo.boo.biff.bar", "foo.boo.biff", ".bar")<br>
splitextTest(".csh.rc", ".csh", ".rc")<br>
splitextTest("nodots", "nodots", "")<br>
splitextTest(".cshrc", ".cshrc", "")<br>
splitextTest("...manydots", "...manydots", "")<br>
splitextTest("...manydots.ext", "...manydots", ".ext")<br>
splitextTest(".", ".", "")<br>
splitextTest("..", "..", "")<br>
splitextTest("........", "........", "")<br>
<i></i>
</body>
</html>