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

Python批量重命名含下划线无扩展名文件:添加扩展名并去下划线

解决方案

以下是完全用Python实现的代码,可直接嵌入你的项目中,满足筛选无扩展名文件、移除末尾下划线并添加指定扩展名的需求:

import os

target_dir = "/tmp/0/jpg/"
target_extension = ".jpg"

for filename in os.listdir(target_dir):
    full_path = os.path.join(target_dir, filename)
    # 跳过子目录,只处理文件
    if not os.path.isfile(full_path):
        continue
    
    # 分离文件名与扩展名
    base_name, ext = os.path.splitext(filename)
    # 仅处理无扩展名的文件
    if not ext:
        # 移除文件名末尾的所有下划线
        cleaned_base = base_name.rstrip("_")
        # 构造新文件名
        new_filename = f"{cleaned_base}{target_extension}"
        new_full_path = os.path.join(target_dir, new_filename)
        
        # 执行重命名操作
        os.rename(full_path, new_full_path)
        print(f"重命名完成:{filename} → {new_filename}")

关键逻辑说明

  • 准确筛选无扩展名文件:使用os.path.splitext()将文件名拆分为基础名和扩展名,当扩展名ext为空字符串时,判定为无扩展名文件,这比你之前用endswith("")的方式精准得多(endswith("")会匹配所有文件)。
  • 下划线处理:用rstrip("_")只移除文件名末尾的下划线,保留中间的下划线(符合你的示例效果,file_name_2_处理后为file_name_2);如果需要移除所有下划线,可替换为base_name.replace("_", "")。
  • 安全防护:加入os.path.isfile()判断,避免误操作目录(若目标目录下存在子目录)。

原代码问题分析

你之前的代码中,if i.endswith("")的判断逻辑错误,因为任何字符串都默认以空字符串结尾,导致所有文件都会被判定为“无扩展名文件”。正确的做法是通过文件扩展名的实际存在与否来筛选。

效果验证

针对你提供的示例文件:

  • filename1_.jpg:带有.jpg扩展名,不会被处理
  • file_name_2_:无扩展名,处理后变为file_name_2.jpg
  • file_name3:无扩展名,处理后变为file_name3.jpg
    完全匹配预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:50:21