python: rstrip one exact string, respecting order
Is it possible to use the python command rstrip
so that it does only remove one exact string and does not take all letters separately?
I was confused when this happened:
>>>"Boat.txt".rstrip(".txt")
>>>'Boa'
What I expected was:
>>>"Boat.txt".rstrip(".txt")
>>>'Boat'
Can I somehow use rstrip and respect the order, so that I get the second outcome?
You're using wrong method. Use str.replace
instead:
>>> "Boat.txt".replace(".txt", "")
'Boat'
NOTE: str.replace
will replace anywhere in the string.
>>> "Boat.txt.txt".replace(".txt", "")
'Boat'
To remove the last trailing .txt
only, you can use regular expression:
>>> import re
>>> re.sub(r"\.txt$", "", "Boat.txt.txt")
'Boat.txt'
If you want filename without extension, os.path.splitext
is more appropriate:
>>> os.path.splitext("Boat.txt")
('Boat', '.txt')
Starting with Python 3.9, use .removesuffix()
:
"Boat.txt".removesuffix(".txt")
On earlier versions of Python, you'll have to either define it yourself:
def removesuffix(s, suf):
if suf and s.endswith(suf):
return s[:-len(suf)]
return s
(you need to check that suf
isn't empty, otherwise removing an empty suffix e.g. removesuffix("boat", "")
will do return s[:0]
and return ""
instead of "boat"
)
or use regex:
import re
suffix = ".txt"
s = re.sub(re.escape(suffix) + '$', '', s)