2016-11-19 240 views
1

我正在使用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您可以檢查文本之前,之後和我用過的腳本。

謝謝:)

+1

u字符串前綴表示* unicode字符串*,而b前綴表示字節字符串*。 '\ xfa'是ascii值爲'FA'的char的編碼。 –

+0

@YotamSalmon但我如何擺脫「u」並正確打印重音字符? – 0x7067

+0

'u'只是當您使用'print(lst)'而不是單獨打印每個元素時Python添加的信息。 – furas

回答

2

你有一個清單

>>> 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,否則移動!

+0

謝謝:)我不知道 – 0x7067

1

字符串前面的「u」告訴你有一個unicode字符串。

相關問題