os.path.relpath() source code for Python 2.5
Today I needed to use the os.path.relpath()
function. However this function was introduced in Python 2.6 and I am using Python 2.5 for my project. Luckily, James Gardner has written a version that works with Python 2.5 (on Posix systems (which mine is (Linux))). His relpath
function is part of his BareNecessities package. You can view the documentation here.
Here is James Gardner's relpath
function:
from posixpath import curdir, sep, pardir, join
def relpath(path, start=curdir):
"""Return a relative version of a path"""
if not path:
raise ValueError("no path specified")
start_list = posixpath.abspath(start).split(sep)
path_list = posixpath.abspath(path).split(sep)
# Work out how much of the filepath is shared by start and path.
i = len(posixpath.commonprefix([start_list, path_list]))
rel_list = [pardir] * (len(start_list)-i) + path_list[i:]
if not rel_list:
return curdir
return join(*rel_list)
Related posts
- How to get the filename and it's parent directory in Python — posted 2011-12-28
- How to remove ^M characters from a file with Python — posted 2011-10-03
- Options for listing the files in a directory with Python — posted 2010-04-19
- Monitoring a filesystem with Python and Pyinotify — posted 2010-04-09
- A hack to copy files between two remote hosts using Python — posted 2010-02-08
Comments
Fixed to deal with missing posixpath functions, works in 2.4 too pam
from posixpath import curdir, sep, pardir, join, abspath, commonprefix
def relpath(path, start=curdir):
"""Return a relative version of a path"""
if not path:
raise ValueError("no path specified")
start_list = abspath(start).split(sep)
path_list = abspath(path).split(sep)
# Work out how much of the filepath is shared by start and path.
i = len(commonprefix([start_list, path_list]))
rel_list = [pardir] * (len(start_list)-i) + path_list[i:]
if not rel_list:
return curdir
return join(*rel_list)