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

1

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

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

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

рубик

EDIT: Пути, которые у меня есть, - это яйца Python и некоторые исполняемые файлы. Я хочу удалить все яйцо, а не каталоги внутри него, например, EGG-INFO или pkg_name. Поэтому это должно быть /usr/.../dist-packages/pkg_name-0.1-py2.7.egg/. Другой путь, поскольку он является исполняемым, остается таким, каким он есть.

спасибо

  • 0
    Как алгоритм может сказать, что это не должно быть просто /usr ?
  • 0
    Смотрите мое редактирование. Это должно быть яйцо питона.
Показать ещё 2 комментария
Теги:
path
prefix

1 ответ

2
Лучший ответ

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

/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) -го
  • 0
    Спасибо. Я знаю, что это не совсем ясно, но я не знаю, как это объяснить. Я хочу иметь общие префиксы, которые являются каталогом. Так что в вашем примере это будет: /usr/bin, /usr/etc/, /usr/local . Но проблема более определена, чем это. Пути, которые я имею, - это яйца Python и их исполняемый файл. Я хочу удалить все яйцо, а не каталоги внутри него (например, EGG-INFO или pkg_name ). Я должен отредактировать свой вопрос ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню