47

是否可以使用 python 命令rstrip,以便它只删除一个确切的字符串并且不单独获取所有字母?

发生这种情况时我很困惑:

>>>"Boat.txt".rstrip(".txt")
>>>'Boa'

我的预期是:

>>>"Boat.txt".rstrip(".txt")
>>>'Boat'

我可以以某种方式使用 rstrip 并尊重订单,以便获得第二个结果吗?

4

6 回答 6

53

你使用了错误的方法。改用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')
于 2013-09-10T15:54:58.953 回答
26

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)
于 2013-09-10T15:58:29.093 回答
12

在 Python 3.9 中,作为PEP-616的一部分,您现在可以使用removeprefixandremovesuffix函数:

>>> "Boat.txt".removeprefix("Boat")
>>> '.txt'

>>> "Boat.txt".removesuffix(".txt")
>>> 'Boat'
于 2020-08-12T16:02:12.047 回答
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'
>>> 
于 2015-02-02T13:39:06.147 回答
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))
于 2018-05-09T14:31:49.937 回答
0

除了其他出色的答案外,有时rpartiton也可能使您到达那里(取决于确切的用例)。

>> "Boat.txt".rpartition('.txt')
('Boat', '.txt', '')

>> "Boat.txt".rpartition('.txt')[0]
'Boat'
于 2020-08-18T14:09:38.433 回答