функция разделения строк в Python - PullRequest
0 голосов
/ 02 мая 2018

Я использую: Python 2.6.6

У меня есть следующий пример кода. scnd_dic.txt, содержит китайский символ; У меня проблема с выводом сплита. Есть ли способ увидеть китайский символ в результате разделения вместо Unicode?

печать (строка): 勀 KE4

print (line.split ()): [u '\ xe5 \ x8b \ x80', 'KE4']

u '\ xe5 \ x8b \ x80' vs 勀;

import codecs
with codecs.open('scnd_dic.txt', 'r', encoding='utf-8') as f:  

          #d = dict(line.rstrip().split(None, 1) for line in f)

          for line in f:

                 print(line)

                 print(line.split() )

в стороне scnd_dic.txt есть несколько строк, подобных следующим:

勀   KE4
垸   HUAN2
昇   SHENG1
洩   XIE4
犇   BEN1
缐   XIAN4

Выход:

勀   KE4
[u'\xe5\x8b\x80', u'KE4']
垸   HUAN2
[u'\xe5\x9e\xb8', u'HUAN2']
昇   SHENG1
[u'\xe6\x98\x87', u'SHENG1']
洩   XIE4
[u'\xe6\xb4\xa9', u'XIE4']
犇   BEN1
[u'\xe7\x8a\x87', u'BEN1']
祕   MI4
[u'\xe7\xa5\x95', u'MI4']
缐   XIAN4

1 Ответ

0 голосов
/ 03 мая 2018

Ваша проблема не имеет ничего общего с юникодом, кодированием или декодированием. Вы видите шестнадцатеричное представление вместо фактического символа, потому что именно так python 2 печатает строки в виде элементов в списке, когда они имеют символы не ascii. Если вы хотите показать фактические символы, вам нужно обойти механизм печати списков (читай: не печатать список).

with codecs.open('scnd_dic.txt', 'r', encoding='utf-8') as f:  
    for line in f:
        print(line)
        print(u'[u\'{}\', u\'{}\']'.format(*line.split()))

Выход:

勀   KE4

[u'勀', u'KE4']
垸   HUAN2

[u'垸', u'HUAN2']
昇   SHENG1

[u'昇', u'SHENG1']
洩   XIE4

[u'洩', u'XIE4']
犇   BEN1

[u'犇', u'BEN1']
缐   XIAN4

[u'缐', u'XIAN4']
...