Сократить строки в Python до определенной точки - PullRequest
1 голос
/ 27 января 2010

В моем приложении на Python есть строки, которые выглядят так:

test1/test2/foo/

Каждый раз, когда я получаю такую ​​строку, я хочу уменьшить ее, начиная с хвоста и уменьшая до достижения кулака "/".

test1/test2/

Больше примеров:

foo/foo/foo/foo/foo/  => foo/foo/foo/foo/
test/test/            => test/
how/to/implement/this => how/to/implement/

Как я могу реализовать это в Python?

Заранее спасибо!

Ответы [ 7 ]

6 голосов
/ 27 января 2010

Звучит так, будто вам нужна функция os.path.dirname. Возможно, вам придется звонить более одного раза:

>>> import os.path
>>> os.path.dirname("test1/test2/")
'test1/test2'
>>> os.path.dirname("test1/test2")
'test1'
5 голосов
/ 27 января 2010
 newString = oldString[:oldString[:-1].rfind('/')]
 # strip out trailing slash    ----^       ^---- find last remaining slash
5 голосов
/ 27 января 2010

str.rsplit() с аргументом maxsplit. Или, если это путь, посмотрите в os.path или urlparse.

1 голос
/ 27 января 2010
>>> import os
>>> path="how/to/implement/this"
>>> os.path.split(path)
('how/to/implement', 'this')
>>> os.path.split(path)[0]
'how/to/implement'
0 голосов
/ 28 января 2010

Если вы имеете в виду «/», как в разделителе путей, вам нужна следующая функция:

os.path.dirname(your_argument)

Если нет, то вы хотите:

def your_function(your_argument):
    result= your_argument.rstrip("/").rpartition("/")[0]
    if result:
        return result + "/"
    return result

Пожалуйста, укажите, каким должен быть результат, когда в качестве аргумента используется "test /": это должен быть "/" или ""? Я предположил второе в моем коде выше.

0 голосов
/ 27 января 2010
'/'.join(s.split('/')[:-1]+[''])
0 голосов
/ 27 января 2010
>>> os.path.split('how/to/implement/this'.rstrip('/'))
('how/to/implement', 'this')
>>> os.path.split('how/to/implement/this/'.rstrip('/'))
('how/to/implement', 'this')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...