Несколько общих префиксов среди разных путей

Извините за название, моя проблема заключается в следующем. У меня есть список путей, и я хочу получить несколько общих префиксов. Например, учитывая, что у меня есть:

['/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']

Я хочу иметь:

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

Потому что первые два имеют общий префикс, который является каталогом. Надеюсь, я ясно дал понять,

рубик

РЕДАКТИРОВАТЬ: пути у меня есть яйца Python и некоторые исполняемые файлы. Я хочу удалить все яйцо, а не каталоги внутри него, как EGG-INFO или же pkg_name, Так должно быть /usr/.../dist-packages/pkg_name-0.1-py2.7.egg/, Другой путь, поскольку он является исполняемым файлом, остается без изменений.

Спасибо

1 ответ

Решение

Проблема не четко определена. Что вы хотите иметь в этом случае:

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

Будет ли это один /usr или два: /usr/bin/usrили три?

В любом случае алгоритм будет таким:

  1. сортировать список
  2. взять первый элемент и сделать os.path.commonprefix() с 2-го, 3-го,..., i-го, пока общего префикса нет /; это будет ваша первая группа
  3. повторите шаг 2, начиная с (i+1) -ого
Другие вопросы по тегам