You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用rstrip('.csv')处理文件名为何出现异常?

为什么rstrip('.csv')会意外删除文件名末尾的s?

嘿,这个坑我之前踩过!问题出在你对rstrip()方法的作用理解上——它不是匹配并删除完整的后缀字符串,而是会把传入的参数当作一个字符集合,然后从字符串末尾开始,删除所有属于这个集合里的字符,直到碰到第一个不在集合里的字符为止。

具体到你的例子:

当你调用name.rstrip('.csv')时,传入的字符集合是{'.', 'c', 's', 'v'}。拿"demographics.csv"来说:

  1. 首先会删除末尾的.csv,得到"demographics";
  2. 接着检查这个新字符串的末尾字符s,发现s属于字符集合{'.', 'c', 's', 'v'},所以继续删除,直到碰到不在集合里的字符(也就是demographic里的c),最终结果就变成了"demographic"。
    "sat_results.csv"的情况完全一样,末尾的s被误删,得到"sat_result"。

正确的解决方案

处理文件名后缀,最好用专门针对文件名的工具,或者精准匹配后缀的方法:

方法1:使用os.path.splitext()(推荐)

这是Python标准库中专门用来拆分文件名和后缀的方法,兼容性和安全性都拉满:

import os
data_files = [ "ap_2010.csv", "class_size.csv", "demographics.csv", "graduation.csv", "hs_directory.csv", "sat_results.csv" ]
data_names = [os.path.splitext(name)[0] for name in data_files]

运行后得到的结果就是你想要的:
["ap_2010", "class_size", "demographics","graduation","hs_directory", "sat_results"]

方法2:使用str.rpartition()

这个方法会从右往左找第一个匹配的分隔符,然后返回包含前缀、分隔符、后缀的元组,取前缀即可:

data_files = [ "ap_2010.csv", "class_size.csv", "demographics.csv", "graduation.csv", "hs_directory.csv", "sat_results.csv" ]
data_names = [name.rpartition('.')[0] for name in data_files]

方法3:切片(仅当确定所有文件都是.csv后缀时可用)

如果能保证所有文件名都以.csv结尾,直接截取前-4位也可以:

data_files = [ "ap_2010.csv", "class_size.csv", "demographics.csv", "graduation.csv", "hs_directory.csv", "sat_results.csv" ]
data_names = [name[:-4] for name in data_files]

内容的提问来源于stack exchange,提问作者Tomás R. Pita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:11:11