On 07Mar2020 15:31, Alex Hall <alex.mojaki@gmail.com> wrote:
I've defined functions like this in my own utility library and I use them all the time, so I think they're very useful and would like to seem them built in. But I have two functions for each end:
def strip_optional_suffix(string, suffix): """
strip_optional_suffix('abcdef', 'def') 'abc' strip_optional_suffix('abcdef', '123') 'abcdef' """ if string.endswith(suffix): return string[:-len(suffix)] return string
My utility library has them too, like this: def cutprefix(s, prefix): ''' Strip a `prefix` from the front of `s`. Return the suffix if `.startswith(prefix)`, else `s`. Example: >>> abc_def = 'abc.def' >>> cutprefix(abc_def, 'abc.') 'def' >>> cutprefix(abc_def, 'zzz.') 'abc.def' >>> cutprefix(abc_def, '.zzz') is abc_def True ''' if prefix and s.startswith(prefix): return s[len(prefix):] return s def cutsuffix(s, suffix): ''' Strip a `suffix` from the end of `s`. Return the prefix if `.endswith(suffix)`, else `s`. Example: >>> abc_def = 'abc.def' >>> cutsuffix(abc_def, '.def') 'abc' >>> cutsuffix(abc_def, '.zzz') 'abc.def' >>> cutsuffix(abc_def, '.zzz') is abc_def True ''' if suffix and s.endswith(suffix): return s[:-len(suffix)] return s Like yours, they return the original object if unchanged. I think yours misbehaved if given an empty suffix, which mine special cases out: >>> 'abc'[:-0] '' Cheers, Cameron Simpson <cs@cskk.id.au>