[Python-Dev] splitext('.cshrc') (original) (raw)

Larry Hastings larry at hastings.org
Tue Mar 6 22:43:19 CET 2007


Martin v. Löwis wrote:

Ok - now I'm confused: do you consider this behavior (splitext('.pythonrc') == ('', '.pythonrc')) correct or not?

+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.

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).

Hope this helps,

/larry/

import os

def splitext(f): sepIndex = f.rfind(os.sep) if os.altsep: altsepIndex = f.rfind(os.altsep) sepIndex = max(sepIndex, altsepIndex)

dotIndex = f.rfind(".") if dotIndex > sepIndex: # skip all leading dots filenameIndex = sepIndex + 1 while filenameIndex < dotIndex: if f[filenameIndex] != '.': return f[:dotIndex], f[dotIndex:] filenameIndex += 1

return f, ''

def splitextTest(path, filename, ext): assert splitext(path) == (filename, ext) assert splitext(os.sep + path) == (os.sep + filename, ext) assert splitext("abc" + os.sep + path) == ("abc" + os.sep + filename, ext) assert splitext("abc.def" + os.sep + path) == ("abc.def" + os.sep + filename, ext) if os.altsep: assert splitext(os.altsep + path) == (os.altsep + filename, ext) assert splitext("abc" + os.altsep + path) == ("abc" + os.altsep + filename, ext) assert splitext("abc.def" + os.altsep + path) == ("abc.def" + os.altsep + filename, ext)

splitextTest("foo.bar", "foo", ".bar") splitextTest("foo.boo.bar", "foo.boo", ".bar") splitextTest("foo.boo.biff.bar", "foo.boo.biff", ".bar") splitextTest(".csh.rc", ".csh", ".rc") splitextTest("nodots", "nodots", "") splitextTest(".cshrc", ".cshrc", "") splitextTest("...manydots", "...manydots", "") splitextTest("...manydots.ext", "...manydots", ".ext") splitextTest(".", ".", "") splitextTest("..", "..", "") splitextTest("........", "........", "") // -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.python.org/pipermail/python-dev/attachments/20070306/4848d482/attachment-0001.html



More information about the Python-Dev mailing list