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.jpgfile_name3:无扩展名,处理后变为file_name3.jpg
完全匹配预期结果。
内容的提问来源于stack exchange,提问作者Rick T
相关产品推荐
相关产品推荐

