需求场景:
手里有个音频课程资源,上百集mp3,但文件名不是自己想要的,可以利用python来一键将文件夹里的音频按照自己的命名方式命名并且可以按顺序播放(文件名以数字开头,依次往下排序)。
具体代码:
import os
import re
import shutil
def batch_rename_mp3(folder_path, example_name):
"""
按顺序重命名文件夹内的MP3文件
:param folder_path: 需要重命名的文件夹路径
:param example_name: 命名模板示例(如"001音频课程.mp3")
"""
# 检查文件夹是否存在
if not os.path.isdir(folder_path):
raise FileNotFoundError(f"文件夹 {folder_path} 不存在")
# 解析示例文件名
example_base = os.path.splitext(example_name)[0] # 去除扩展名
match = re.match(r'^(\d+)(.*)', example_base)
if not match:
raise ValueError("示例文件名必须包含数字开头的编号(如'001音频课程')")
start_num = int(match.group(1)) # 提取起始编号
num_length = len(match.group(1)) # 获取编号位数
fixed_text = match.group(2).strip() # 获取固定文本部分
# 获取文件夹中所有MP3文件(不区分大小写)
all_files = [f for f in os.listdir(folder_path)
if f.lower().endswith('.mp3')]
# 按文件名升序排序(可修改为其他排序方式)
all_files.sort()
# 检查文件数量
if not all_files:
print("警告:文件夹中没有MP3文件")
return
# 开始重命名
for index, filename in enumerate(all_files):
# 生成新编号(三位数补零格式)
new_number = start_num + index
new_filename = f"{new_number:0{num_length}d}{fixed_text}.mp3"
# 构建完整路径
src_path = os.path.join(folder_path, filename)
dst_path = os.path.join(folder_path, new_filename)
# 处理文件名冲突
if os.path.exists(dst_path):
print(f"冲突跳过:{new_filename} 已存在")
continue
# 执行重命名
shutil.move(src_path, dst_path)
print(f"已重命名:{filename} → {new_filename}")
if __name__ == "__main__":
# 用户输入(实际使用时可以改为直接赋值)
target_folder = input("请输入文件夹路径:").strip()
name_template = input("请输入命名模板(如'001音频课程.mp3'):").strip()
# 执行重命名
try:
batch_rename_mp3(target_folder, name_template)
print("\n操作完成!")
except Exception as e:
print(f"\n发生错误:{str(e)}")