How to delete everything after a certain character in a string?

41,197

Solution 1

Just take the first portion of the split, and add '.zip' back:

s = 'test.zip.zyz'
s = s.split('.zip', 1)[0] + '.zip'

Alternatively you could use slicing, here is a solution where you don't need to add '.zip' back to the result (the 4 comes from len('.zip')):

s = s[:s.index('.zip')+4]

Or another alternative with regular expressions:

import re
s = re.match(r'^.*?\.zip', s).group(0)

Solution 2

str.partition:

>>> s='abc.zip.blech'
>>> ''.join(s.partition('.zip')[0:2])
'abc.zip'
>>> s='abc.zip'
>>> ''.join(s.partition('.zip')[0:2])
'abc.zip'
>>> s='abc.py'
>>> ''.join(s.partition('.zip')[0:2])
'abc.py'

Solution 3

Use slices:

s = 'test.zip.xyz'
s[:s.index('.zip') + len('.zip')]
=> 'test.zip'

And it's easy to pack the above in a little helper function:

def removeAfter(string, suffix):
    return string[:string.index(suffix) + len(suffix)]

removeAfter('test.zip.xyz', '.zip')
=> 'test.zip'

Solution 4

I think it's easy to create a simple lambda function for this.

mystrip = lambda s, ss: s[:s.index(ss) + len(ss)]

Can be used like this:

mystr = "this should stay.zipand this should be removed."
mystrip(mystr, ".zip") # 'this should stay.zip'

Solution 5

You can use the re module:

import re
re.sub('\.zip.*','.zip','test.zip.blah')
Share:
41,197
ThatGuyJay
Author by

ThatGuyJay

Updated on July 15, 2020

Comments

  • ThatGuyJay
    ThatGuyJay almost 4 years

    How would I delete everything after a certain character of a string in python? For example I have a string containing a file path and some extra characters. How would I delete everything after .zip? I've tried rsplit and split , but neither included the .zip when deleting extra characters.

    Any suggestions?

  • DSM
    DSM almost 11 years
    Isn't this simply Óscar López's answer? I'm also not sure I see the point of using a lambda if you're going to immediately give it a name.
  • joente
    joente almost 11 years
    You're right but the answers showed up quickly and I didn't refreshed the page before posting.. F.J has also a similar answer.