如何在python中删除路径前缀?

时间:2012-01-01 12:11:07

标签: python string path prefix

我想知道这是什么pythonic函数:

我想删除wa路径之前的所有内容。

p = path.split('/')
counter = 0
while True:
    if p[counter] == 'wa':
        break
    counter += 1
path = '/'+'/'.join(p[counter:])

例如,我希望'/book/html/wa/foo/bar/'成为'/wa/foo/bar/'

4 个答案:

答案 0 :(得分:129)

更好的答案是使用os.path.relpath:

http://docs.python.org/2/library/os.path.html#os.path.relpath

>>> import os
>>> full_path = '/book/html/wa/foo/bar/'
>>> print os.path.relpath(full_path, '/book/html')
'wa/foo/bar'

答案 1 :(得分:21)

>>> path = '/book/html/wa/foo/bar/'
>>> path[path.find('/wa'):]
'/wa/foo/bar/'

答案 2 :(得分:6)

对于Python 3.4+,您应该使用pathlib.PurePath.relative_to。 来自文档:

>>> p = PurePosixPath('/etc/passwd')
>>> p.relative_to('/')
PurePosixPath('etc/passwd')

>>> p.relative_to('/etc')
PurePosixPath('passwd')

>>> p.relative_to('/usr')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pathlib.py", line 694, in relative_to
    .format(str(self), str(formatted)))
ValueError: '/etc/passwd' does not start with '/usr'

另请参阅this StackOverflow question以获取有关您问题的更多答案。

答案 3 :(得分:1)

import re

path = '/book/html/wa/foo/bar/'
m = re.match(r'.*(/wa/[a-z/]+)',path)
print m.group(1)