significance
significance

Reputation: 5105

how to handle '../' in python?

i need to strip ../something/ from a url

eg. strip ../first/ from ../first/bit/of/the/url.html where first can be anything.

what's the best way to achieve this?

thanks :)

Upvotes: 0

Views: 282

Answers (2)

Eric O. Lebigot
Eric O. Lebigot

Reputation: 94565

You can simply split the path twice at the official path separator (os.sep, and not '/') and take the last bit:

>>> s = "../first/bit/of/the/path.html"
>>> s.split(os.sep, 2)[-1]
'bit/of/the/path.html'

This is also more efficient than splitting the path completely and stringing it back together.

Note that this code does not complain when the path contains fewer than 3+ path elements (for instance, 'file.html' yields 'file.html'). If you want the code to raise an exception if the path is not of the expected form, you can just ask for its third element (which is not present for paths that are too short):

>>> s.split(os.sep, 2)[2]

This can help detect some subtle errors.

Upvotes: 5

Philar
Philar

Reputation: 3897

EOL has given a nice and clean approach however I could not resist giving a regex alternative to it:)

>>> import re
>>> m=re.search('^(\.{2}\/\w+/)(.*)$','../first/bit/of/the/path.html')
>>> m.group(1)
'../first/'

Upvotes: 1

Related Questions