Python 3中lstrip与rstrip无法移除文件名前缀后缀是什么原因?
错误点分析
- 你对
lstrip()、rstrip()的方法作用理解有误:这两个方法的参数是「要移除的字符集合」,不是「要匹配移除的前缀/后缀字符串」,且只有字符串开头/结尾的字符属于参数里的字符集合时才会执行删除操作。- 调用
filename.lstrip('_')时,你只传了下划线作为要移除的字符,而filename的开头字符是s,不属于要移除的字符集合,所以不会执行任何删除,直接返回原始字符串。 - 调用
rstrip('.')时,你只传了.作为要移除的字符,而filename的结尾字符是v,同样不属于要移除的字符集合,也不会执行任何删除。
- 调用
- 你的逻辑本身不符合需求:你要移除的是「第一个下划线及之前的所有前缀内容」和「.csv后缀」,不是只删除单独的下划线和点。
正确实现方案
方法1:Python 3.9+ 版本可用
filename = "stuff_category.csv" # 按下划线仅拆分1次,取第一个下划线之后的内容,再移除.csv后缀 category = filename.split('_', 1)[-1].removesuffix('.csv')
其中split('_', 1)表示只按下划线拆分1次,避免文件名主体部分还有下划线时被错误拆分,取索引-1的内容就可以拿到第一个下划线之后的所有内容。
方法2:兼容低版本Python
如果不确定后缀长度,可以用os.path.splitext统一处理后缀:
import os filename = "stuff_category.csv" # 找到第一个下划线的索引位置 underline_pos = filename.find('_') # 先去掉后缀 name_without_suffix = os.path.splitext(filename)[0] # 从第一个下划线的下一位开始截取,拿到最终结果 category = name_without_suffix[underline_pos+1:]
内容的提问来源于stack exchange,提问作者user2954167
相关产品推荐
相关产品推荐

