[Python-ideas] New explicit methods to trim strings
Cameron Simpson
cs at cskk.id.au
Fri Mar 29 22:19:02 EDT 2019
On 30Mar2019 12:37, Steven D'Aprano <steve at pearwood.info> wrote:
>On Fri, Mar 29, 2019 at 04:05:55PM -0700, Christopher Barker wrote:
>> This proposal would provide a minor gain for an even more minor
>> disruption.
>
>I don't think that is correct. I think you are underestimating the gain
>and exaggerating the disruption :-)
>
>Cutting a prefix or suffix from a string is a common task, and there is
>no obvious "battery" in the std lib available for it. And there is a
>long history of people mistaking strip() and friends as that battery.
>The problem is that it seems to work:
>
>py> "something.zip".rstrip(".zip")
>'something'
>
>until it doesn't:
>
>py> "something.jpg".rstrip(".jpg")
>'somethin'
Yeah, this is a very common mistake. I don't think I've made it myself
(not really sure why, except that I use strip a lot to remove whitespace
so I don't think about the file extesion thing for it).
But I've seen people make this mistake. And personally I strip prefixes
or suffixes from strings a lot and the "measure the suffix and get
s[:-len(suffix)]" shuffle is tedious. Also I need to decode that shuffle
in my head every time I see it _and_ debug it because in the file
extension case I'm always concerned as to whether it gets the "."
separator or not. With .cutsuffix('.foo') it is really obvious and
unambiguous.
Also, I'm curious - how often to people use strip() to strip stuff other
than whitespace? It is rare or unknown for myself.
So I am a data point for the individually small but common gain.
[...adding a method to str is only going to break quite weird code...]
>The functionality is clear, meets a real need, is backwards compatible,
>and has no significant downsides. The only hard part is bikeshedding
>names for the methods:
>
> lcut rcut
> cutprefix cutsuffix
> ltrim rtrim
> prestrip poststrip
> etc.
>
>Am I wrong about any of these statements?
I do not think so. I agree with everything you've said, anyway.
For the shed:
I'm a big -1 on ltrim and rtrim because of confusion with the VERY well
known PHP trim function which does something else.
I like lcut/rcut as succienct and reminiscent of the UNIX "cut" command.
I like cutprefix and cutsuffix even more, as having similar heft as the
startswith and endswith methods.
I dislike prestrip and poststrip because of their similarity to strip,
which like the PHP trim does something else. -1 here too.
Cheers,
Cameron Simpson <cs at cskk.id.au>
More information about the Python-ideas
mailing list