You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用eyed3加载指定音乐目录文件报不存在错误的解决方案

报错原因

os.listdir() 仅返回目标目录下的文件名,不会携带完整目录前缀。你当前代码直接把孤立的文件名(比如报错里的Bieber_-_Yummy.mp3)传给eyed3.load()时,程序会从脚本当前运行的工作目录查找文件,自然定位不到存放在D:\Music App\music下的资源,这个问题和eyed3本身的目录读取能力无关。

修复代码

方案1:使用os.path拼接路径(兼容所有Python版本)

import os
import eyed3

def load_songs(self):
    # 路径前加r前缀声明为原始字符串,避免反斜杠触发转义
    self.music_path = r"D:\Music App\music"
    self.music_files = os.listdir(self.music_path)

    for file_name in self.music_files:
        # 拼接目录和文件名,生成完整绝对路径
        full_path = os.path.join(self.music_path, file_name)
        # 过滤掉子目录、非mp3文件,避免无效加载报错
        if os.path.isfile(full_path) and file_name.lower().endswith(".mp3"):
            self.music = eyed3.load(full_path)
            # 后续读取专辑、歌手、标题等标签的逻辑写在这里

方案2:使用pathlib(Python3.4+推荐,路径处理更简洁)

from pathlib import Path
import eyed3

def load_songs(self):
    self.music_path = Path(r"D:\Music App\music")
    # 直接匹配目录下所有mp3格式文件,返回值自带完整路径
    for mp3_path in self.music_path.glob("*.mp3"):
        self.music = eyed3.load(mp3_path)
        # 后续业务逻辑
额外注意点
  • Windows系统下写带反斜杠的路径时,统一加r前缀,避免\和后续字符组合成转义字符(比如\m、\t)导致路径本身失效
  • 如果加载文件时弹出大量标签编码警告,可以在代码初始化位置加eyed3.log.setLevel("ERROR"),只保留错误级别的日志,不影响正常标签读取
  • 如果需要递归读取music目录下所有子文件夹里的音乐,可以把glob规则改成**/*.mp3,同时加recursive=True参数即可。

内容的提问来源于stack exchange,提问作者Yianji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:36:27