如何使用pathlib切换路径的基础?

时间:2019-12-04 16:55:51

标签: python-3.x pathlib

我正在尝试通过除去底座来获得路径的一部分,目前这是我正在做的:

original = '/tmp/asd/asdqwe/file'
base = '/tmp/asd/'
wanted_part = original.strip(base)

不幸的是,我没有得到'asdqwe/file',而是得到'qwefile',出于某种原因,脱衣舞曲很奇怪,但我没有得到。

对于我的问题,最好的解决方案是使用pathlib.Path,因为我的函数将其专有性作为路径,并且在添加新的基本路径后,返回值将修整后的字符串转换为Path。 但是,如果没有可用的pathlib解决方案,那么使用字符串也将非常有用,目前我正在处理一个奇怪的错误...

2 个答案:

答案 0 :(得分:3)

您误解了str.strip的工作方式。该方法将从目标字符串的“边缘”中删除参数中指定的所有字符,而不考虑其指定顺序:

original = '/tmp/asd/asdqwe/file'
base = '/tmp/asd/'
wanted_part = original.strip(base)
print(wanted_part)
# qwe/file

您想做的可能是切片:

wanted_part = original[len(base):]
print(wanted_part)
# asdqwe/file

或者,使用pathlib

from pathlib import Path

original = Path('/tmp/asd/asdqwe/file')
base = Path('/tmp/asd/')

wanted_part = original.relative_to(base)
print(wanted_part)
# asdqwe/file

答案 1 :(得分:0)

strip会删除一个字符序列,而不是字符串前缀或后缀,因此它将继续删除您传递的序列中的任何字符。可以通过Instaed来测试原始字符是否以您的基数开头,然后是否将其取为字符串的剩余字符,即基数长度之后的字符。

original = '/tmp/asd/asdqwe/file'
base = '/tmp/asd/'
if original.startswith(base):
    wanted_part = original[len(base):]
    print(wanted_part)

输出

asdqwe/file