尝试制作一个从播放列表中提取歌曲信息的脚本。
这是我的播放列表的开头:
#EXTM3U
#EXTINF:402,Junior's Eyes - Black Sabbath
/Users/omitted/Black Sabbath/[1978] Never Say Die!/03. Junior's Eyes.mp3
#EXTINF:327,After Forever - Black Sabbath
/Users/omitted/Black Sabbath/[1971] Master of Reality/02. After Forever.mp3
#EXTINF:341,Killing Yourself to Live - Black Sabbath
/Users/omitted/Black Sabbath/[1973] Sabbath Bloody Sabbath/05. Killing Yourself to Live.mp3
#EXTINF:210,Rock 'n' Roll Doctor - Black Sabbath
/Users/omitted/Black Sabbath/[1976] Technical Ecstasy/06. Rock 'n' Roll Doctor.mp3
这是我写的剧本:
import re
f = open('Sabbath.m3u', 'r')
pTitle = re.compile('(?<=,)[A-Za-z0-9][A-Za-z0-9 \']+[A-Za-z0-9]')
pArtist = re.compile('(?<=- )[A-Za-z0-9][A-Za-z0-9 ]+[A-Za-z0-9]')
for str in f:
title = pTitle.search(str)
artist = pArtist.search(str)
print artist.group() + ' - ' + title.group()
f.close()
运行脚本的结果是:
黑色安息日 - 少年的眼睛
就是这样。为什么它不循环遍历整个文件?它显然是第2行,因为第1行是#EXTM3U&#39;在每个.m3u文件中。
请记住,我想知道为什么这不起作用,而不仅仅是替代代码可以解决这个问题。
答案 0 :(得分:2)
您的文件中有一些行正则表达式无法匹配。在这种情况下,Match对象为None
,而None
没有.group()
属性,导致AttributeError
被引发。您应该在控制台中看到该错误。
您可以执行类似
的操作for line in f:
t = pTitle.search(line)
title = t.group() if t else "(N.A.)"
a = pArtist.search(line)
artist = a.group() if a else "(N.A.)"
print '{} - {}'.format(artist, title)