我想使用strip()方法剥离路径名称的特定部分,但看到的结果我无法解释。在这里解释我正在观察的行为以及解决方案将非常有帮助。
>>> a = 'C:\dir1\dir2\dir3'
>>> b = 'C:\dir1\dir2\dir3\dir4\dir5'
>>> b.strip(a)
'4\\dir5'
我期望b.strip(a)的输出为\dir4\dir5
。我尝试使用原始字符串,甚至转义所有斜杠,但我似乎无法解释这里发生了什么。
>>> help("".strip)
Help on built-in function strip:
strip(chars=None, /) method of builtins.str instance
Return a copy of the string with leading and trailing whitespace removed.
If chars is given and not None, remove characters in chars instead.
参数实际上不是被视为字符串,而是被视为要删除的字符的set。 b
中最左边的字符而不是a
中的字符是“ 4”,因此这就是为什么在开头保留4的原因。 b
中最右边的字符而不是a
中的最后一个字符是“ 5”,因此从右端没有删除任何内容。
@@ TimPeters解释了为什么strip
没有按照您的意愿做。对于您的应用程序,此代码将执行您想要的操作:
a = r'C:\dir1\dir2\dir3'
b = r'C:\dir1\dir2\dir3\dir4\dir5'
b = b[len(a):] if b.startswith(a) else b
print(b)
输出
\dir4\dir5