如何在Python中移除路径前缀?

97 投票
5 回答
96006 浏览
提问于 2025-04-17 09:20

我想知道在Python中怎么做这个:

我想把路径中“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/'

5 个回答

27

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序中使用这些数据。这个过程可能会涉及到很多步骤,比如读取文件、处理数据、再把结果输出到屏幕上。

有些时候,我们会遇到一些问题,比如程序运行得很慢,或者出现错误。这时候,我们就需要仔细检查代码,看看哪里出了问题。可能是因为我们没有正确地处理数据,或者是代码的逻辑有问题。

为了让程序运行得更快,我们可以尝试优化代码,比如减少不必要的计算,或者使用更高效的方法来处理数据。这样可以让程序在处理大量数据时更加流畅。

总之,编程就像做一道菜,需要仔细准备材料,按照步骤来,才能做出美味的成果。如果中间出现问题,就要耐心找出原因,进行调整。

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

对于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'

另外,你可以查看 这个StackOverflow的问题,里面有更多关于你问题的答案。

239

一个更好的解决办法是使用 os.path.relpath:

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

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

撰写回答