为什么我的脚本不能正确打印Unicode字符?
我正在使用Twitter数据,我有一个包含一堆推文的文件,每行一个。这些推文大多是用葡萄牙语写的,所以他们有特殊字符,如“é”,“á”等。为什么我的脚本不能正确打印Unicode字符?
我试图从文件中过滤停用词并标记推文,但是在处理我的脚本后没有正确打印特殊字符。
实施例:
AT_USER PRA concurso检察署到entrando nessas集会porque emprego BOM TA FODA
变为:
[u'pra 'u'concurso' ,u'p \ xfablico',u't \ xf4',u'entrando',u'nessas',u'agora',u'porque',u'emprego',u'bom',u't \ xe1 ',u'foda']
为什么我在每个令牌之前都有这个“u”?为什么“ú”变成“\ xfa”?
我该如何得到没有“u”的标记并且重音字符正确打印?
在这里gist您可以检查文本之前,之后和我用过的脚本。
谢谢:)
你有一个清单
>>> l = [u'pra', u'concurso', u'p\xfablico', u't\xf4', u'entrando', u'nessas', u'agora', u'porque', u'emprego', u'bom', u't\xe1', u'foda']
当你打印的清单,单词看起来怪异
>>> print l
[u'pra', u'concurso', u'p\xfablico', u't\xf4', u'entrando', u'nessas', u'agora', u'porque', u'emprego', u'bom', u't\xe1', u'foda']
但是,如果打印的话,它看起来很好
>>> for word in l:
... print word
...
pra
concurso
público
tô
entrando
nessas
agora
porque
emprego
bom
tá
foda
>>>
当你打印一个列表时,python会打印一个列表的表示,这对于程序员来说是非常有用的,以查看对象是什么。它有括号和引号,并且......“u”表示它是一个Unicode字符串,而不是一个常规的ascii字符串。您会看到ASCII字符的ascii转义版本,因为这是以ascii查看这些字符的唯一方法。如果您将打印的字符串评估为python命令,那么您甚至会将原始列表重新取回!
>>> l2 = eval("[u'pra', u'concurso', u'p\xfablico', u't\xf4', u'entrando', u'nessas', u'agora', u'porque', u'emprego', u'bom', u't\xe1', u'foda']")
>>> l == l2
True
一切都好!你只是得到列表的怪胎视图。
python 3在处理Unicode方面做得更好。除非你有理由坚持使用2.x,否则移动!
谢谢:)我不知道 – 0x7067
字符串前面的“u”告诉你有一个unicode字符串。
u字符串前缀表示* unicode字符串*,而b前缀表示字节字符串*。 '\ xfa'是ascii值为'FA'的char的编码。 –
@YotamSalmon但我如何摆脱“u”并正确打印重音字符? – 0x7067
'u'只是当您使用'print(lst)'而不是单独打印每个元素时Python添加的信息。 – furas