str.strip() 的奇怪行为

5 投票
5 回答
1058 浏览
提问于 2025-04-15 23:40
>>> t1 = "abcd.org.gz"
>>> t1
'abcd.org.gz'
>>> t1.strip("g")
'abcd.org.gz'
>>> t1.strip("gz")
'abcd.org.'
>>> t1.strip(".gz")
'abcd.or'

为什么'.org'中的'g'不见了?

5 个回答

5

Python 3.9中,新增了两个字符串处理的方法,分别是.removeprefix().removesuffix()。这两个方法可以用来去掉字符串开头或结尾的部分。幸运的是,这两个方法的名字非常直观,能够清楚地告诉我们它们的功能。

>>> print (sys.version)
3.9.0 
>>> t1 = "abcd.org.gz"
>>> t1.removesuffix('gz')
'abcd.org.'
>>> t1
'abcd.org.gz'
>>> t1.removesuffix('gz').removesuffix('.gz')
'abcd.org.'     # No unexpected effect from last removesuffix call
 
9

x.strip(y) 这个方法会把字符串 x 开头和结尾处所有在 y 中出现的字符都去掉。

这意味着

'foo42'.strip('1234567890') == 'foo'

因为 '4''2' 都出现在 '1234567890' 这个字符串里。


如果你想去掉文件的扩展名,可以使用 os.path.splitext 这个方法。

>>> import os.path
>>> t1 = "abcd.org.gz"
>>> os.path.splitext(t1)
('abcd.org', '.gz')
10

strip(".gz") 这个函数会把字符串开头和结尾的 .gz 这些字符去掉。

撰写回答