前言
网易云下载的音乐文件,信息挺全的,但是缺少序号,用本地播放器听是乱序的,就很头疼。
遂写一个python脚本解决问题
本python会把基于音乐文件的元信息,重命名文件 到 以下格式
序号 标题.后缀
额外依赖库
mutagen
使用方法
把以下源代码复制到一个文件里,例如 重命名音乐文件.py
然后使用命令
python 重命名音乐文件.py D:/网易云音乐下载目录
即可,自动将文件夹内,包含子文件夹,把音乐文件全部重命名
源代码
import os
import shutil
import argparse
import mutagen
# import re
def process_dir(in_dir):
char_tr_table = str.maketrans('\/:*?"<>|', '\/:*?"<>|')
# reg = re.compile('''^\d{2} .+$''')
for root, dirs, files in os.walk(in_dir):
for file in files:
in_fp = root + '/' + file
# if reg.match(file):
# # 快速跳过
# continue
title = None
tracknumber = None
ext = os.path.splitext(file)[1]
try:
meta = mutagen.File(in_fp, easy=True)
title = meta.get('title', None)
tracknumber = meta.get('tracknumber', None)
title = title[0]
tracknumber = int(tracknumber[0])
except BaseException as e:
print(f'警告!跳过文件{in_fp},因为遇到了错误 {e}')
if tracknumber is None or title is None:
continue
# 把不合法字符转换为全角
title = title.translate(char_tr_table)
out_fp = f'{root}/{tracknumber:02d} {title}{ext}'
if in_fp == out_fp:
continue
# print(f'移动文件 {in_fp} -> {out_fp}')
shutil.move(in_fp, out_fp)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('in_dir', type=str, help='要处理的文件夹')
args = parser.parse_args()
process_dir(args.in_dir)
效果如下