是否可以使用python命令rstrip
,以便它只删除一个完整的字符串并且不单独收取所有字母?
发生这种情况时我很困惑:
>>>"Boat.txt".rstrip(".txt")
>>>'Boa'
我的期望是:
>>>"Boat.txt".rstrip(".txt")
>>>'Boat'
我可以以某种方式使用rstrip并尊重顺序,以便获得第二个结果吗?
答案 0 :(得分:21)
你使用的是错误的方法。请改用str.replace
:
>>> "Boat.txt".replace(".txt", "")
'Boat'
注意:str.replace
将替换字符串中的任何位置。
>>> "Boat.txt.txt".replace(".txt", "")
'Boat'
要仅删除最后一个尾随.txt
,您可以使用regular expression:
>>> import re
>>> re.sub(r"\.txt$", "", "Boat.txt.txt")
'Boat.txt'
如果您想要不带扩展名的文件名,os.path.splitext
更合适:
>>> os.path.splitext("Boat.txt")
('Boat', '.txt')
答案 1 :(得分:11)
定义辅助函数:
def strip_suffix(s, suf):
if s.endswith(suf):
return s[:len(s)-len(suf)]
return s
或使用正则表达式:
import re
suffix = ".txt"
s = re.sub(re.escape(suffix) + '$', '', s)
答案 2 :(得分:6)
在Python 3.9中,作为PEP-616的一部分,您现在可以使用removeprefix
和removesuffix
函数:
>>> "Boat.txt".removeprefix("Boat")
>>> '.txt'
>>> "Boat.txt".removesuffix(".txt")
>>> 'Boat'
答案 3 :(得分:0)
>>> myfile = "file.txt"
>>> t = ""
>>> for i in myfile:
... if i != ".":
... t+=i
... else:
... break
...
>>> t
'file'
>>> # Or You can do this
>>> import collections
>>> d = collections.deque("file.txt")
>>> while True:
... try:
... if "." in t:
... break
... t+=d.popleft()
... except IndexError:
... break
... finally:
... filename = t[:-1]
...
>>> filename
'file'
>>>
答案 4 :(得分:0)
无论扩展类型如何,这都可以。
# Find the rightmost period character
filename = "my file 1234.txt"
file_extension_position = filename.rindex(".")
# Substring the filename from first char up until the final period position
stripped_filename = filename[0:file_extension_position]
print("Stripped Filename: {}".format(stripped_filename))
答案 5 :(得分:0)
除了其他出色的答案外,有时rpartiton
可能还会带您到达那里(取决于确切的用例)。
>> "Boat.txt".rpartition('.txt')
('Boat', '.txt', '')
>> "Boat.txt".rpartition('.txt')[0]
'Boat'