2013-12-12 3 views
1

У меня есть набор файловых каталогов, с которыми я манипулирую с помощью python. Тем не менее, все, о чем я забочусь, это последние два уровня каталога. Так что, если бы я былЗахватить последние 2 строки разделения, python

"topdirectory/sub1/subsub1/subsubsub1/target" 
"topdirectory/sub1/target" 

necesary возвращаемые строки будет

"subsubsub1/target" 

и

"sub1/target" 

Я знаю, что питон имеет метод типа сплит строки, но как я могу сказать это только захватить компоненты LAST 2, разделенные метриками?

Редактировать: Извините, ребята, я должен был объяснить, что это не ДЕЙСТВИТЕЛЬНО настройка каталога/файла, а база данных timeseries, очень близкая к ней. Я подумал, что было бы легче объяснить это. Пути - это, по сути, каталоги/файлы, но поскольку это база данных, использование утилиты OS не будет иметь никакого эффекта.

+0

Быстрый грязный способ: '>>> a =" topdirectory/sub1/subsub1/subsubsub1/target " >>> a.split ("/", a.count ("/") - 1) [- 1] 'subsubsub1/target'' Вероятно оптимизируется со встроенной функцией (и, глядя в документ) –

ответ

2

Попробуйте

"topdirectory/sub1/subsub1/subsubsub1/target".rsplit('/',2)[-2:] 

Этот подход работает для любой строки в целом.

Но, как указано в комментариях, если вы ссылаетесь на системный путь, я предпочел бы использовать модуль os, как предложил Шон Перри. Обратите внимание, что в разных операционных системах разделитель может быть разным и т. Д.

+2

Пока вы знаете, что есть две или более штук. В противном случае это исключение ждет. –

+0

будет, по крайней мере, всегда быть этими двумя. Вернее, 3. Верхний каталог всегда есть, и из-за того, как я вжился, логически не имеет 1 директории без другой. – Zack

+0

последнее, что мне нужно, в финале 2 в строковой форме, а не в списке. Я знаю обходное решение, но есть ли что-то вроде path.rsplit (':', 2) [- 2:]. Join (":") – Zack

4

Модуль os.path содержит функцию split для этого. Он возвращает имя dirname и базовое имя. Запустите его дважды, и у вас есть две последние базы.

Очевидно, что вы хотите проверить, что есть две или более базы.

+0

+1. Всегда полезно использовать 'os.path' вместо строковой манипуляции при работе с путями. Он обрабатывает все проблемы с переносимостью и странные угловые случаи, о которых вы не думаете во время начальной разработки, поэтому вам не нужно возвращаться к вашему коду через 6 месяцев и выяснить, почему он не работает в Windows или когда cwd это символическая ссылка или что-то еще ... – abarnert

+0

ok. Я дам вам знать, почему я не пошел с этим, потому что я фактически не имею дело с файловой структурой, а база данных временных рядов, очень близкая структуре файла/каталога. Это было просто легче объяснить. Я боюсь, что использование ОС не принесет мне большой пользы. – Zack

+0

, но полезно знать – Zack

Смежные вопросы