Python读写MP3评论标签遇问题:无法读取或保存评论
解决Python使用eyed3读写MP3评论标签的问题
一、正确设置评论的方法
你的代码问题出在两个地方:一是没处理MP3无ID3标签的情况,二是comments.set()的参数没适配VLC这类播放器的识别逻辑。试试下面的修正代码:
import eyed3 mp3 = eyed3.load(filename) # 先确保标签存在,没有就初始化 if mp3.tag is None: mp3.initTag() # 设置评论时指定语言和空描述(多数播放器优先读取空描述的评论) mp3.tag.comments.set("comment set with eyed3", lang='eng', desc='') # 用ID3v2.3版本保存,兼容性更好,同时指定UTF-8编码 mp3.tag.save(version=eyed3.id3.ID3_V2_3, encoding='utf-8')
解释:
initTag():如果MP3原本没有ID3标签,直接操作mp3.tag会报错,这一步是兜底。desc='':VLC等播放器通常只识别描述为空的评论,默认参数可能带了隐藏描述,导致不显示。- 指定ID3v2.3:ID3v2.4的兼容性不如v2.3,部分老播放器识别不了。
二、正确读取评论的方法
mp3.tag.comments是一个评论列表,不是单个值,直接读取会拿到对象而不是文本。要获取实际内容,得遍历或匹配目标评论:
mp3 = eyed3.load(filename) if mp3.tag and mp3.tag.comments: # 优先找英文、空描述的评论(和设置的对应) for comment in mp3.tag.comments: if comment.lang == 'eng' and comment.desc == '': print("读取到的评论:", comment.text) break else: # 没找到的话就取第一个评论 print("读取到的评论:", mp3.tag.comments[0].text) else: print("这个MP3没有评论标签")
三、排查要点
- 升级eyed3:旧版本有不少bug,执行
pip install --upgrade eyed3更新到最新版。 - 检查文件权限:确保你有MP3文件的写入权限,不然
save()会静默失败。 - 刷新VLC缓存:修改后关闭VLC再重新打开,避免显示旧的缓存数据。
内容的提问来源于stack exchange,提问作者B Panzer
相关产品推荐
相关产品推荐

