How to delete everything after a certain character in a string?
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')
ThatGuyJay
Updated on July 15, 2020Comments
-
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
andsplit
, but neither included the .zip when deleting extra characters.Any suggestions?
-
Mr. Bultitude over 8 yearspossible duplicate of How to remove all characters after a specific character in python?
-
-
DSM almost 11 yearsIsn'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 almost 11 yearsYou're right but the answers showed up quickly and I didn't refreshed the page before posting.. F.J has also a similar answer.