how to determine whether pathname1 is below bathname2

Thomas Jollans thomas at jollans.com
Sun Jul 11 09:52:09 EDT 2010


On 07/11/2010 03:37 PM, Gelonida wrote:
> #################################################
> import os
> def is_below_dir(fname,topdir):
>     relpath = os.path.relpath(fname,topdir)
>     return not relpath.startswith('..'+os.sep)
> 
> print is_below_dir(path1,path2)
> #################################################
> The basic idea is, if the path name of path1
> relative to path2 does NOT start with '..', then
> it must be below path2
> 
> 
> Does anybody see pitfalls with that solution?
> Is there by any chance a function, that I overlooked,
> which does already what I'd like to do?

It probably won't work on Windows because it isolates volumes (drive
letters). What does, for example, os.path.relpath do when
you pass r'c:\foo\bar', r'y:\drive\letters\are\silly' ? I see two
reasonably correct options:

either raise an exception (there is no relative path) or return the
absolute path, which doesn't start with ..

On UNIX, the only potential problem I see is that it may or may not do
what you expect when symlinks are involved somewhere.



More information about the Python-list mailing list