使用Python与eyeD3批量清空MP3专辑名、曲目号等标签时遇AttributeError问题求助
使用Python与eyeD3批量清空MP3专辑名、曲目号等标签时遇AttributeError问题求助
看起来你遇到的问题主要是没正确过滤MP3文件、处理非MP3文件的返回值,以及未检查MP3是否存在ID3标签导致的。我帮你梳理下问题点,再给出修正后的可运行代码:
问题根源分析
- 多余的文件打开操作:你用
with open(...)打开文件完全没必要,eyed3.load()可以直接读取MP3文件路径,不需要提前打开文件内容。 - 未提前过滤非MP3文件:目录里的非MP3文件(比如那个
.m3u播放列表)会被eyed3.load()返回None,这时候访问audiofile.tag自然会触发AttributeError。 - 未检查标签是否存在:有些MP3文件可能根本没有ID3标签,这时候
audiofile.tag会是None,直接访问audiofile.tag.album也会报错。 - 路径拼接不规范:手动用
\\拼接路径容易出错,推荐用os.path.join统一处理更安全。 - track_num的清空方式错误:
track_num在eyeD3中是一个元组(曲目号, 总曲目数),直接设为0会留下无效数据,应该设为(None, None)来完全清空。
修正后的代码
import os import eyed3 # 目标目录 directory = r"C:\Users\bill\Temp" print('开始处理...') print('当前操作目录:', directory) # 遍历目录下的所有文件,先过滤出MP3文件 for filename in os.listdir(directory): # 不区分大小写匹配MP3后缀,避免漏掉.MP3格式的文件 if not filename.lower().endswith(".mp3"): print(f"跳过非MP3文件: {filename}") continue # 用os.path.join安全拼接文件路径 file_path = os.path.join(directory, filename) # 加载MP3文件 audiofile = eyed3.load(file_path) # 双重保险:检查是否成功加载MP3 if not audiofile: print(f"无法加载MP3文件: {filename}") continue print(f"\n正在处理: {filename}") edit_flag = 0 # 检查是否存在ID3标签,没有则创建新标签(避免tag为None) if not audiofile.tag: print("该文件无ID3标签,将创建新的空标签") audiofile.initTag() # 清空专辑名 if audiofile.tag.album: print(f"原专辑名: {audiofile.tag.album}") audiofile.tag.album = "" edit_flag = 1 # 清空曲目号(eyeD3中track_num是(曲目号, 总曲目数)元组) if audiofile.tag.track_num: print(f"原曲目号: {audiofile.tag.track_num}") audiofile.tag.track_num = (None, None) edit_flag = 1 # 清空光盘号 if audiofile.tag.disc_num: print(f"原光盘号: {audiofile.tag.disc_num}") audiofile.tag.disc_num = (None, None) edit_flag = 1 # 如果有修改则保存,增加异常捕获避免单个文件失败中断脚本 if edit_flag: try: audiofile.tag.save() print(f"已保存修改: {filename}") except Exception as e: print(f"保存{filename}时出错: {str(e)}") else: print(f"无需要修改的标签: {filename}") print("\n所有文件处理完成!")
额外说明
- 代码先过滤MP3文件,避免无效文件干扰;
- 给无标签的MP3自动创建空标签,彻底避免
tag为None的报错; - 用
(None, None)清空曲目号和光盘号,符合eyeD3的API规范; - 增加异常捕获,确保单个文件处理失败不会导致整个脚本停止运行。
你可以试试这个代码,应该能顺利完成批量清空MP3标签的需求。
备注:内容来源于stack exchange,提问作者bill z
相关产品推荐
相关产品推荐

