我正在尝试通过除去底座来获得路径的一部分,目前这是我正在做的:
original = '/tmp/asd/asdqwe/file'
base = '/tmp/asd/'
wanted_part = original.strip(base)
不幸的是,我没有得到'asdqwe/file'
,而是得到'qwefile'
,出于某种原因,脱衣舞曲很奇怪,但我没有得到。
对于我的问题,最好的解决方案是使用pathlib.Path
,因为我的函数将其专有性作为路径,并且在添加新的基本路径后,返回值将修整后的字符串转换为Path。
但是,如果没有可用的pathlib解决方案,那么使用字符串也将非常有用,目前我正在处理一个奇怪的错误...
答案 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