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

Python3.7使用lstrip/rstrip处理文件名时丢失字符t的问题求解

问题根因

你遇到的问题是错误使用了Python字符串的lstrip()/rstrip()方法导致的:这两个方法的传入参数是字符集合,而非需要匹配的完整前缀/后缀字符串。你传入'Test_'时,Python会把字符串开头所有属于T、e、s、t、_的字符全部移除,所以开头的t字符就被误删了;同理rstrip()也会触发同类逻辑导致字符被意外移除。

修复方案

不用第三方库,完全兼容Python3.7的实现方案如下,两种方案可按需选择:

方案1:字符串分割法(逻辑简单,适配你的固定命名规则)

你的文件名规则固定为Test_中间内容_6位数字.txt,可以先去掉.txt后缀,再按下划线分割,去掉首个元素(Test)和末尾元素(6位数字)后重新拼接即可:

import os

directory = "替换为你的文件目录路径"
for file in os.listdir(directory):
    if file.endswith(".txt") and file.startswith("Test"):
        print(f"old name is: {file}\n")
        # 移除.txt后缀
        name_without_suffix = file[:-4]
        # 按下划线切割为列表
        parts = name_without_suffix.split("_")
        # 取除了开头Test和末尾6位编号之外的部分,拼接回原格式
        middle_part = "_".join(parts[1:-1])
        print(f"New name is: {middle_part}\n")

方案2:标准库re正则匹配(适配性更强,规则更严谨)

用Python自带的re模块直接匹配提取中间内容,容错性更高:

import os
import re

directory = "替换为你的文件目录路径"
# 正则规则:匹配Test_开头、任意中间内容、_6位数字.txt结尾的文件名,直接捕获中间内容
pattern = re.compile(r'^Test_(.+)_\d{6}\.txt$')
for file in os.listdir(directory):
    match_res = pattern.match(file)
    if match_res:
        print(f"old name is: {file}\n")
        middle_part = match_res.group(1)
        print(f"New name is: {middle_part}\n")
效果验证

两种方案都可以得到你预期的处理结果:

  • Test_abcdtt_000001.txt --> abcdtt
  • Test_abct_000001.txt --> abct
  • Test_defg_000001.txt --> defg
  • Test_tcty_000001.txt --> tcty
  • Test_ab_ty_ui_000001.txt --> ab_ty_ui

内容的提问来源于stack exchange,提问作者ComradeH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:39:03