使用unicode清理包含字符串和元组的各种列表

时间:2013-07-20 19:26:05

标签: python python-2.7

我有一个从id3中获取的列表。来自.mp3的标签。当我打印列表时,它是字符串和带有unicode的元组的混合。

我从列表中直接打印出以下内容。

[('album', [u'Singles']), ('artist', [u'Led Zeppelin']), ('title', [u'Kashmir'])]

我想要这个:

专辑Singles,艺术家Led Zeppelin,头衔Kashmir

我试过使用以下内容:

nvar = filter(lambda x: x!="[u'" and x!="(" and x!=")" and x!="]", var)

打印:

[('album', [u'Singles']), ('artist', [u'Led Zeppelin']), ('title', [u'Kashmir'])]

我可以使用:

>>> nvar = filter(lambda x: x!="[" and x!="'" and x!="(" and x!=")" and x!="]", str(var))
>>> nvar
'album, uSingles, artist, uLed Zeppelin, title, uKashmir'

但是我从unicode那里留下了你。如果我使用x!=“u”,那么任何带有u的单词在该函数运行后都会出错。

此外,这似乎是艰难的做事方式。

有什么想法吗?提前致谢。

2 个答案:

答案 0 :(得分:1)

假设tags确实是一个包含2元组(str,list)的Python列表,那么:

tags = [('album', [u'Singles']), ('artist', [u'Led Zeppelin']), ('title', [u'Kashmir'])]
print ', '.join('{} {}'.format(el[0], el[1][0]) for el in tags)
# album Singles, artist Led Zeppelin, title Kashmir

答案 1 :(得分:0)

下面的内容应该有效。由于'u'位于'('和'''之间,因此不会影响'真实'数据。

    def Plain(self, U_String) :
          P_String = str(U_String)
          m=re.search("^\(\u?\'(.*)\'\,\)$", P_String)
          if (m) :  #Typical unicode
             P_String = m.group(1).decode("utf8")
          return P_String