LINUX.ORG.RU

Python разбиение строк

 


0

1

День добрый.

У меня есть строка ('/var/log/somedir/somefile.log'). Мне надо получить директорию ('/var/log/somedir'). Как проще всего это сделать?

Разбивать с помощью str.split('/') не хочется, потому что мне вернеться список, который потом, придёться обратно собирать в строку за исключением последнего элемента. Вроде того:

tmp_list = log_filename.split('/')
del tmp_list[0], tmp_list[len(tmp_list) - 1]
path = '/' +  '/'.join(tmp_list)

★★★

Ну братюнь

>>> import os.path
>>> os.path.dirname('/var/log/somedir/somefile.log')
'/var/log/somedir'

anonymous
()
Ответ на: комментарий от GateKeeper

а что такое «head != '/'*len(head)»? Проверка на то что оно не '///'? Но тогда после head.rstrip оно будет пустой строкой. Я бы сделал head.replace('//', '/') если надо убрать двойные слэши.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Я не знаю. Это всё Гвидо. Его спрашивай. Я просто разместил объяву (с)

PS. /usr/lib64/python/posixpath.py:dirname

В ntpath.py, подозреваю, аналогично.

GateKeeper ★★
()
Последнее исправление: GateKeeper (всего исправлений: 1)
Ответ на: комментарий от GateKeeper

а, я понял, это убирает слэши на конце. Но всё равно конструкция странная. Я бы сделал что-то типа rstrip('/')

true_admin ★★★★★
()
Ответ на: комментарий от GateKeeper

а, распарсил. Да, наверно, разумная реализация.

Я, правда, сначала пути нормализовывал (удалить двойные слэши итп), но, возможно, это может что-то поломать.

true_admin ★★★★★
()
Ответ на: комментарий от Deleted
In [7]: '1234'.rfind('5')
Out[7]: -1

In [8]: '1234'[0:'1234'.rfind('5')]
Out[8]: '123'

Надеюсь, понятно, на что я намекаю?

GateKeeper ★★
()

Еще один пример в коллекцию используя rsplit

s = '/a/b/c'
s.rsplit('/', 2)[0] if s.endswith('/') else s.rsplit('/',1)[0]
Yur4eg ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.