2010-11-13 5 views
0

j'ai besoin de dépouiller ../something/ d'un urlcomment gérer '../' en python?

par exemple. bande ../first/ de ../first/bit/of/the/url.htmlfirst peut être n'importe quoi.

Quelle est la meilleure façon d'y parvenir?

merci :)

+2

Voulez-vous parler d'un chemin ou une URL? –

+0

Voulez-vous dire que «first» peut être quelque chose d'autre que vous connaissez à l'avance, ou est-ce un nom de répertoire que vous ne connaissez pas à l'avance? – EOL

Répondre

5

Vous pouvez simplement diviser le chemin deux fois au séparateur de chemin officiel (os.sep, et non pas '/') et de prendre le dernier bit:

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

Ceci est également plus efficace que de diviser complètement le chemin et de le resserrer ensemble.

Notez que ce code ne se plaint pas lorsque le chemin contient moins de 3 éléments de chemin (par exemple, 'file.html' donne 'file.html'). Si vous voulez que le code pour soulever une exception si le chemin n'a pas la forme attendue, vous pouvez simplement demander son troisième élément (qui n'est pas présente pour les chemins qui sont trop courts):

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

Cela peut aider détecter des erreurs subtiles.

+1

J'ai supprimé ma solution, la vôtre est nettement meilleure. –

1

EOL a donné une approche agréable et propre mais je ne pouvais pas résister à donner une alternative regex à elle :)

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