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

如何批量删除文件名中可变的.NiXXNjXX后缀?

批量删除文件名末尾指定可变部分的解决方案

你的代码里的问题在于:.Ni*Nj*是glob通配符语法,但你把它当成普通字符串用in判断,而实际文件名里没有*字符,所以这个判断永远不成立,自然不会执行重命名操作。下面给你几种可行的实现方法:

方法一:用rsplit分割字符串

目标删除的部分是从.Ni开始到.txt之前的内容,直接从右侧以.Ni为分割点拆分一次,取前缀部分再加.txt即可:

import os
rootdir = r"C:\Py Practice\Sorted File Groups\nmdAnmd"

for filename in os.listdir(rootdir):
    # 只处理txt文件,避免误操作其他类型文件
    if filename.endswith(".txt") and ".Ni" in filename:
        # 从右侧按.Ni分割一次,取前面的前缀部分
        prefix = filename.rsplit(".Ni", 1)[0]
        new_filename = f"{prefix}.txt"
        old_path = os.path.join(rootdir, filename)
        new_path = os.path.join(rootdir, new_filename)
        os.rename(old_path, new_path)

方法二:用正则表达式精准匹配替换

如果要删除的.NiXXNjXX中XX是数字,用正则可以精准匹配该模式,避免误删其他包含.Ni的内容:

import os
import re

rootdir = r"C:\Py Practice\Sorted File Groups\nmdAnmd"
# 匹配.Ni后接数字、Nj后接数字的固定模式
pattern = re.compile(r"\.Ni\d+Nj\d+")

for filename in os.listdir(rootdir):
    if filename.endswith(".txt"):
        new_filename = pattern.sub("", filename)
        # 只有文件名确实发生变化时才执行重命名
        if new_filename != filename:
            old_path = os.path.join(rootdir, filename)
            new_path = os.path.join(rootdir, new_filename)
            os.rename(old_path, new_path)

方法三:用glob匹配目标文件再处理

先用glob筛选出所有符合.Ni*Nj*.txt模式的文件,再批量处理,不用遍历目录下所有文件,效率更高:

import os
import glob

rootdir = r"C:\Py Practice\Sorted File Groups\nmdAnmd"
# 构造glob匹配路径,找出所有目标文件
file_pattern = os.path.join(rootdir, "*.Ni*Nj*.txt")

for old_path in glob.glob(file_pattern):
    filename = os.path.basename(old_path)
    # 分割得到前缀并生成新文件名
    prefix = filename.rsplit(".Ni", 1)[0]
    new_filename = f"{prefix}.txt"
    new_path = os.path.join(rootdir, new_filename)
    os.rename(old_path, new_path)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:45:49