On 30Mar2019 12:37, Steven D'Aprano <steve@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@cskk.id.au>