Python eyed3 检查嵌入的图片

0 投票
1 回答
1776 浏览
提问于 2025-04-17 21:55

我需要一个脚本,能够检查整个文件夹里的mp3文件,看看这些文件里有没有嵌入的图片。这个功能应该返回这样的文件列表。

def checkAlbumCover( file_list ):
    ret = list() #list with mp3 files without album cover
    for f in file_list:
        mp3 = eyed3.load( f )
        if len( mp3.tag.images ) == 0:
            ret.append( f )
    return ret

我还有一个功能,可以遍历每个文件夹和子文件夹,获取所有文件的路径。然后我检查这些文件是不是mp3格式的,如果不是,就把它们删除。最后,我得到了一个包含173个mp3文件的列表(在我的情况下)。这些文件路径是正确的,不过上面的功能给我报错了。

输出:

173 mp3 files found.
Traceback (most recent call last):
  File "get_album.py", line 32, in <module>
    main()
  File "get_album.py", line 18, in main
    list_without_image = checkAlbumCover( all_files )
  File "get_album.py", line 10, in checkAlbumArt
    if len( mp3.tag.images ) == 0: # 0 images embedded
AttributeError: 'NoneType' object has no attribute 'images'

我哪里做错了?

编辑:我在检查图片之前打印了f,结果发现我的功能在崩溃之前已经检查了大约20个文件。

我“修复”了它:

if mp3.tag is None: # 0 images embedded
    ret.append( f )

不过,我还是不太明白为什么tag会是None……

1 个回答

0

我觉得你遇到的问题是,你正在处理的一些mp3文件没有ID3标签。ID3标签就像是音乐文件的身份证,里面存储了歌曲的名称、艺术家等信息。当这些mp3文件没有ID3标签时,eyeD3就会返回None,这意味着没有找到标签值,这样就导致你的程序崩溃了。

撰写回答