如何在Python中移除路径前缀?
我想知道在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'