2011-08-15 5 views
1

Désolé pour le titre, mon problème est le suivant. J'ai une liste de chemins et je veux obtenir multiples préfixes communs. Par exemple, étant donné que j'ai:Plusieurs préfixes communs parmi les différents chemins

['/usr/local/lib/python2.7/dist-packages/pkg_name-0.1-py2.7.egg/pkg_name', 
'/usr/local/lib/python2.7/dist-packages/pkg_name-0.1-py2.7.egg/EGG-INFO', 
'/usr/bin/pkg_name'] 

Je veux avoir:

['/usr/local/lib/python2.7/dist-packages/pkg_name-0.1-py2.7.egg/', 
'/usr/bin/pkg_name'] 

Parce que les deux premiers ont un préfixe commun qui est un répertoire. J'espère que ce fait clair,

rubik

EDIT: Les chemins que j'ai des oeufs Python et quelques executables. Je veux enlever l'oeuf entier, pas les répertoires à l'intérieur, comme EGG-INFO ou pkg_name. Donc, il doit être /usr/.../dist-packages/pkg_name-0.1-py2.7.egg/. L'autre chemin, puisqu'il s'agit d'un exécutable, reste tel quel.

Merci

+0

Comment l'algorithme peut dire qu'il ne doit pas être juste '/ usr'? – hamstergene

+0

Voir ma modification. Ce doit être un œuf de Python. – rubik

+0

Pourquoi ne pas simplement supprimer les chemins qui contiennent '.egg /'? – hamstergene

Répondre

2

Le problème n'est pas bien défini. Que voulez-vous avoir dans ce cas:

/usr/bin/a 
/usr/bin/b 
/usr/etc 
/usr/local 

Sera-ce un /usr ou deux: /usr/bin/usr, ou trois?

Dans les deux cas, l'algorithme sera comme ceci:

  1. trier la liste
  2. prendre le premier élément et faire os.path.commonprefix() avec 2, 3, ..., i-ème jusqu'au préfixe commun est pas /; ce sera votre premier groupe
  3. Répétez l'étape 2, à partir de (i + 1) ème
+0

Merci. Je sais que ce n'est pas bien défini, mais je ne sais pas comment l'expliquer. Je veux avoir des préfixes communs qui sont répertoire. Donc dans votre exemple ce serait: '/ usr/bin,/usr/etc /,/usr/local'. Mais le problème est plus défini que cela. Les chemins que j'ai sont des oeufs de Python et leur exécutable. Je veux enlever l'oeuf entier, pas les répertoires dedans (comme 'EGG-INFO' ou' pkg_name'). Je devrais éditer ma question ... – rubik

Questions connexes