Несколько общих префиксов среди разных путей - PullRequest
1 голос
/ 15 августа 2011

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

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

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

rubik

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

Спасибо

1 Ответ

2 голосов
/ 15 августа 2011

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

/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)-го
...