160 votes

Obtenir un chemin relatif en comparant deux chemins absolus

Disons que j'ai deux chemins absolus. Je dois vérifier si l'emplacement auquel se réfère l'un des chemins est un descendant de l'autre. Si c'est le cas, je dois trouver le chemin relatif du descendant à partir de l'ancêtre. Quelle est la meilleure façon d'implémenter cela en Python ? Y a-t-il une bibliothèque dont je pourrais bénéficier ?

1voto

Jeremy Cochoy Points 278

Editer : Voir la réponse de jme pour la meilleure façon de procéder avec Python3.

En utilisant pathlib, vous avez la solution suivante :

Supposons que nous voulions vérifier si son est un descendant de parent et les deux sont Path objets. Nous pouvons obtenir une liste des pièces dans le chemin avec list(parent.parts) . Ensuite, il suffit de vérifier que le début du fils est égal à la liste des segments du parent.

>>> lparent = list(parent.parts)
>>> lson = list(son.parts)
>>> if lson[:len(lparent)] == lparent:
>>> ... #parent is a parent of son :)

Si vous voulez obtenir la partie restante, vous pouvez simplement faire

>>> ''.join(lson[len(lparent):])

Il s'agit d'une chaîne de caractères, mais vous pouvez bien entendu l'utiliser comme constructeur d'un autre objet Path.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X