是否可以使用 python 命令rstrip
,以便它只删除一个确切的字符串并且不单独获取所有字母?
发生这种情况时我很困惑:
>>>"Boat.txt".rstrip(".txt")
>>>'Boa'
我的预期是:
>>>"Boat.txt".rstrip(".txt")
>>>'Boat'
我可以以某种方式使用 rstrip 并尊重订单,以便获得第二个结果吗?
你使用了错误的方法。改用str.replace
:
>>> "Boat.txt".replace(".txt", "")
'Boat'
注意:str.replace
将替换字符串中的任何位置。
>>> "Boat.txt.txt".replace(".txt", "")
'Boat'
要仅删除最后一个尾随.txt
,您可以使用正则表达式:
>>> import re
>>> re.sub(r"\.txt$", "", "Boat.txt.txt")
'Boat.txt'
如果您想要没有扩展名的文件名,os.path.splitext
更合适:
>>> os.path.splitext("Boat.txt")
('Boat', '.txt')
从Python 3.9开始,使用.removesuffix()
:
"Boat.txt".removesuffix(".txt")
在早期版本的 Python 中,您必须自己定义它:
def removesuffix(s, suf):
if suf and s.endswith(suf):
return s[:-len(suf)]
return s
(你需要检查它suf
不为空,否则删除一个空后缀,例如removesuffix("boat", "")
会做return s[:0]
并返回""
而不是"boat"
)
或使用正则表达式:
import re
suffix = ".txt"
s = re.sub(re.escape(suffix) + '$', '', s)
在 Python 3.9 中,作为PEP-616的一部分,您现在可以使用removeprefix
andremovesuffix
函数:
>>> "Boat.txt".removeprefix("Boat")
>>> '.txt'
>>> "Boat.txt".removesuffix(".txt")
>>> 'Boat'
>>> 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'
>>>
无论扩展类型如何,这都将起作用。
# 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))
除了其他出色的答案外,有时rpartiton
也可能使您到达那里(取决于确切的用例)。
>> "Boat.txt".rpartition('.txt')
('Boat', '.txt', '')
>> "Boat.txt".rpartition('.txt')[0]
'Boat'