Python rstrip:为什么文件名会少掉一个字母?
给文件名去掉扩展名时,如果把 rstrip 的参数理解成完整后缀,可能连文件名里的字母也一起删掉。用两个短字符串,就能看清它的删除边界。
1. 文件名为什么少了一个字母?
name = "report.txt"
print(name.rstrip(".txt")) # repor
print(name.removesuffix(".txt")) # report
rstrip 从右侧连续删除参数所指定的字符。这里的字符集合包含点、t 和 x;扩展名删完后,report 末尾的 t 仍在集合中,因此继续被删掉。
需要按完整后缀删除时,可以使用 removesuffix。示例中它匹配一次 .txt,留下 report。匹配不到后缀时,原内容保持不变。
2. 左侧也有同样的区别
label = "TAG:TOTAL"
print(label.lstrip("TAG:")) # OTAL
print(label.removeprefix("TAG:")) # TOTAL
lstrip 删除字符集合,所以清理完 TAG: 后,正文里的第一个 T 也会被删除。removeprefix 按完整前缀匹配,示例保留了 TOTAL。
这两个完整匹配方法只删除一次。如果标签重复,后面的那一份仍会保留。是否需要反复删除,应由输入规则明确决定。
3. 清理空白时,先明确要去掉哪些字符
text = "\t value \n"
print(repr(text.strip())) # 'value'
print(repr(text.strip(" "))) # '\t value \n'
strip 不传参数时会清理两端空白;显式传入一个空格时,删除范围只包含空格。这个例子的两端分别是制表符与换行,因此第二次调用保留了整个字符串。
选择方法前,可以先写下规则:清理两端、左端还是右端;按字符集合处理,还是匹配完整前后缀。再用没有匹配项、空字符串和重复前后缀检查边界,能更快发现误删。
实际验证与官方参考
上述三段代码已分别运行,并补充验证了后缀未匹配、大小写、重复前后缀及空参数等情况。验证对象是普通字符串,没有执行真实文件操作。
removeprefix 和 removesuffix 从 Python 3.9 开始提供,运行本文示例需使用 Python 3.9 或更高版本。
官方参考为 Python 文档 Built-in Types 中的 str.rstrip、str.lstrip、str.strip、str.removeprefix 与 str.removesuffix,可按以下路径核对:
docs.python.org/3/builtins/stdtypes.html#str.rstripdocs.python.org/3/builtins/stdtypes.html#str.removeprefixdocs.python.org/3/builtins/stdtypes.html#str.removesuffix
AI 辅助说明:本文由 AI 协助组织文字与编写示例,示例已实际执行,并依据上述官方文档核对语义。
- 点赞
- 收藏
- 关注作者
评论(0)