Python去除文件名.txt后缀时异常截断字符问题求助
问题原因与解决办法
原因分析
你使用的strip()方法并非用于精确移除固定后缀,它的核心逻辑是移除字符串两端所有包含在参数中的任意字符,而非匹配整个子串后删除。
以report.txt为例:
filename[-4:]得到子串.txt- 调用
strip('.txt')时,会把字符串两端所有属于{'.', 't', 'x'}集合的字符逐一移除 report的末尾字符t正好在这个集合里,因此被一同截断,最终得到repor
解决办法
方法1:用rsplit按最后一个点分割
这种方式能兼容文件名含多个点的情况,只取最后一个点之前的部分:
filenames = ["report.txt", "downloads.txt", "success.txt", "folders.txt"] for filename in filenames: name = filename.rsplit('.', 1)[0] print(name)
运行输出:
report downloads success folders
方法2:判断后缀后切片
如果确认所有文件均为.txt后缀,可先判断再截取:
filenames = ["report.txt", "downloads.txt", "success.txt", "folders.txt"] for filename in filenames: if filename.endswith('.txt'): name = filename[:-4] else: name = filename # 兼容无后缀的文件 print(name)
方法3:用pathlib模块(推荐)
Python 3.4+ 提供的pathlib是专业的文件路径处理工具,能更健壮地处理文件名:
from pathlib import Path filenames = ["report.txt", "downloads.txt", "success.txt", "folders.txt"] for filename in filenames: name = Path(filename).stem print(name)
Path.stem会直接返回不带后缀的文件名,还支持处理多后缀文件(如file.tar.gz会返回file.tar)。
内容的提问来源于stack exchange,提问作者Nacer
相关产品推荐
相关产品推荐

