Чтение китайского текста из файла и печать его в оболочку - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь создать программу, которая читает строки китайских символов из файла .txt и печатает их в оболочку Python (IDLE?).

Проблема, с которой я столкнулся, заключается в попытке закодировать и декодировать символы в utf-8 до такой степени, что они будут фактически печататься на китайском языке.

  file_name = input("Enter the core name of the text you wish to analyze:")+'.txt'

  file = open(file_name, encoding="utf8")

  file = file.read().decode('utf-8').split()

  print(file)

Каждый раз, когда я запускаю код, я получаю сообщение об этой ошибке.

    file = file.read().decode('utf-8').split()
AttributeError: 'str' object has no attribute 'decode'

Теперь я не совсем уверен, что это значит, так как я новичок вязык программирования, поэтому мне было интересно, могу ли я получить несколько советов от вас, ребята.Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Когда вы читаете файл, открытый таким образом в Python 3:

file = open (file_name, encoding = "utf8")

Вы говорите, что файл закодирован в UTF-8 и Python автоматически расшифрует его.file.read() уже является строкой Unicode (тип str в Python 3), поэтому вы не сможете ее снова декодировать.Просто сделайте следующее (и не перезаписывайте file ... это ваш дескриптор файла):

data = file.read().split()
0 голосов
/ 19 октября 2018

Из вашего сообщения об ошибке я подозреваю, что вывод .read() уже является строкой (точнее, символами Юникода, если вы используете Python 3).

Пробовали ли вы без .decode() call?


Для лучшей обработки файлов используйте контекст with, так как он гарантирует, что ваш файл будет правильно закрыт после выхода из блока.Кроме того, вы можете перебирать строки в файле, используя оператор for line in f.

file_name = input("Enter the core name of the text you wish to analyze:")

with open(file_name + '.txt', encoding='utf8') as f:
    for line in f:
        line = line.strip()   # removes new lines or spaces at the start/end
        print(line)
...