RFVenter RFVenter - 29 days ago 7
Python Question

Path manipulation in python

I have looked on Stack Overflow everywhere but I cant find a solution to this problem.

Given that I have a folder/file as string:

"/path1/path2/path3/file"
how can I get the parent folder and its parent folder. In other words if I want to traverse up one level
"/path1/path2/path3"
or two levels
"/path1/path2"
how can I get those string values from the original string path in python?

Please note that I don't simply want the pieces of the path (in other words not a list of
['path1', 'path2', 'path3']
) but instead
"/path1/path2/path3"
.

Answer

os.path.dirname() (doc) is the way to go. It returns the directory which contains the object pointed by the path:

>>> import os.path
>>> os.path.dirname('/path1/path2/path3/file')
'/path1/path2/path3'

In this case, you want the "grandparent" directory, so just use the function twice:

>>> parent = os.path.dirname('/path1/path2/path3/file')
>>> os.path.dirname(parent)
'/path1/path2'

If you want to do it an arbitrary number of times, a function can be helpful here:

def go_up(path, n):
    for i in range(n):
        path = os.path.dirname(path)

    return path

Here are some examples:

>>> go_up('/path1/path2/path3/file', 1)
'/path1/path2/path3'
>>> go_up('/path1/path2/path3/file', 2)
'/path1/path2'
>>> go_up('/path1/path2/path3/file', 3)
'/path1'
Comments