y循环中的x的python没有完成

时间:2016-07-19 12:55:35

标签: python for-loop

尝试制作一个从播放列表中提取歌曲信息的脚本。

这是我的播放列表的开头:

#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文件中。

请记住,我想知道为什么这不起作用,而不仅仅是替代代码可以解决这个问题。

1 个答案:

答案 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)