使用eyeD3在Python中从mp3文件中检索歌词

4

我目前正尝试使用Python和其eyeD3库从mp3文件中提取歌词。歌词已经嵌入到mp3文件中(通过:MusicBee)。我正在尝试使用eyeD3来返回歌词。但是我无法弄清楚如何做到这一点。我在网上进行了广泛的搜索,但我找到的都是向文件中设置歌词的教程,而我只想从文件中读取它们。以下是我的当前代码:

track = eyed3.load(path)
tag = track.tag
artist = tag.artist
lyrics = tag.lyrics

artist可以正确返回艺术家的名字,但lyrics返回以下内容:

<eyed3.id3.tag.LyricsAccessor object at 0x27402d0>

我该如何提取嵌入在MP3中的原始文本歌词?这是可能的吗?
非常感谢您的提前帮助。
4个回答

6
看起来这是一个迭代器。尝试使用
tag.lyrics[0]

或者
for lyric in tag.lyrics:
  print lyric

如果万不得已,打印对象目录并查找有用的函数。

print dir(tag.lyrics)

非常感谢。我卡在这里好几个小时了。你帮了我很多。 - DonJuma
只是出于好奇,你是怎么知道它是一个迭代器的?这样我以后就知道了。 - DonJuma
3
我阅读了eyed3的id3源代码。我发现文档不够详细,因此去查找真相。 - Anthony Lozano
@DonJuma的歌词属性是复数形式。因此,里面必须有许多元素。 - reFORtEM

3
这对我有效:
tag.lyrics[0].text

2
u"".join([i.text for i in tag.lyrics])

3
你能为你的解决方案添加一些评论吗? - VMAtm

0

DonJuma,Python 告诉你:

<iterator object at hex_location> 

你可以尝试以下方法,但它在字符串上会失败。
hasattr(myObj, '__iter__')

用户mindu在这里解释说,您可以编写一个强大的函数来检查。

try:
    some_object_iterator = iter(some_object)
except TypeError, te:
    print some_object, 'is not iterable'

但是!!! 这不是Pythonic的。Python相信鸭子类型,它基本上说,“如果它看起来像一只鸭子,叫起来像一只鸭子,那么它一定是一只鸭子。”请参阅链接以获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接