backslash woes........

gbreed at cix.compulink.co.uk gbreed at cix.compulink.co.uk
Tue Jul 10 07:33:37 EDT 2001


In article <Xns90DA75C5FEBC9duncanrcpcouk at 127.0.0.1>, 
duncan at NOSPAMrcp.co.uk (Duncan Booth) wrote:

> "Duncan Booth" <duncan at NOSPAMrcp.co.uk> wrote in
> news:Xns90DA74BD3B968duncanrcpcouk at 127.0.0.1: 
> 
> > Martin Franklin <martin.franklin at westerngeco.com> wrote in
> > news:3B4AC7C2.DD53F6BB at westerngeco.com: 
> > 
> >> I am having trouble with windows path names (i'm a UNIX'ite)
> 
> Another useful tip to remember is that except for the DOS command 
> prompt, and some badly behaved applications, Windows actually supports 
> both forward slash and backslash as path separators. So in a Python 
> program (or most other languages) you can use forward slashes anywhere 
> you want to write a pathname.

So long as you aren't using data given to you by the OS.  In this case, I 
think the duality is more of a problem than a solution.  Here's a function 
that I think solves the poster's original problem:

def getPrefixRelatives(*filenames):
        """return the common prefix of the filenames
        and each filename relative to that prefix
        
        """
        # make sure all paths are spelt the same
        normalized = map(os.path.normpath, filenames)
        prefix = os.path.commonprefix(normalized)
        return(prefix, [
            filename[len(prefix):] for filename in normalized])


>>> import os
>>> getPrefixRelatives('c:/python/first.py', 'c:\\python\\sub\\second.py')
('c:\\python\\', ['first.py', 'sub\\second.py'])


Returning UNIX-style / separated pathnames is left as an exercise for the 
reader.


                     Graham



More information about the Python-list mailing list