Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 1, 2017 20:17:30

geniuss7
Зарегистрирован: 2017-01-01
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

UnicodeDecodeError: 'utf-8'

Добрый вечер! Подскажите, пожалуйста, как решить проблему: есть функция, считывающая текст из файла. При считывании вылазит ошибка:

     return f.read()
  File "/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 0: invalid start byte


Как решать эту проблему?

Сам код функции:
 def load_data(filepath):
    if not os.path.exists(filepath):
        return None
    with open(filepath, 'r') as f:
        return f.read()


P.S. В текстовом файле фрагмент из Войны и Мира

Прикреплённый файлы:
attachment article.txt (79,2 KБ)

Офлайн

#2 Янв. 1, 2017 22:15:50

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

UnicodeDecodeError: 'utf-8'

Решить эту проблему у меня получилось так.
1. Выделяем мышкой нужный фрагмент из “Войны и мира” на веб-странице (в данном случае это http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0040.shtml
2. Сохраняем выделенный фрагмент в файл на диске. Я сохранил с кодировкой utf-8, хотя браузер показывает, что на веб-странице используется Windows-Cyrillic (cp1251).
3. Открываем этот файл в Python:

 >>> with open("article1.txt", "r", encoding = "utf-8") as f:
...    f.read()
... 
Получим корректный текст, только он будет одним сплошным куском, а вместо переводов строк в тексте будут вставлены символы “\n”.
Можно вместо f.read() читать так:
 >>> with open("article1.txt", "r", encoding = "utf-8") as f:
        for line in f:
            print(line)
Текст будет выводиться в консоли уже более корректно, правда после каждой строки текста будет пустая строка (поскольку винда использует два символа CR/LF, а не один LF).

Отредактировано old_monty (Янв. 1, 2017 22:17:22)

Офлайн

#3 Янв. 1, 2017 23:01:57

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

UnicodeDecodeError: 'utf-8'

old_monty
print(line)
а так?
print(line),

Офлайн

#4 Янв. 1, 2017 23:17:45

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

UnicodeDecodeError: 'utf-8'

vic57
 print(line),
в python 3 это не даст результата, необходимо сделать так
 print(line, end=" ")  # Добавляет пробел вместо перевода строки

Офлайн

#5 Янв. 1, 2017 23:20:17

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

UnicodeDecodeError: 'utf-8'

vic57
а так?
print(line),
А это еще зачем? В консоли будет опять же с пустыми строками, но еще хуже:
(None,)
– Dieu, quelle virulente sortie – отвечал, нисколько не

(None,)
смутясь такою встречей, вошедший князь, в придворном, шитом мундире, в

(None,)
чулках, башмаках, при звездах, с светлым выражением плоского лица.

Офлайн

#6 Янв. 1, 2017 23:27:40

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

UnicodeDecodeError: 'utf-8'

Romissevd
в python 3 это не даст результата, необходимо сделать так
print(line, end=“ ”) # Добавляет пробел вместо перевода строки
О, вот так отлично! Я забыл про end = “ ”, хотя сам довольно часто его применяю.
Так говорила в июле 1805 года известная Анна Павловна Шерер, фрейлина и
приближенная императрицы Марии Феодоровны, встречая важного и чиновного
князя Василия, первого приехавшего на ее вечер. Анна Павловна кашляла
несколько дней, у нее был грипп, как она говорила (грипп был тогда новое
слово, употреблявшееся только редкими). В записочках, разосланных утром с
красным лакеем, было написано без различия во всех:
“Si vous n'avez rien de mieux à faire, M. le comte (или mon prince), et
si la perspective de passer la soirée chez une pauvre malade ne vous effraye
pas trop, je serai charmée de vous voir chez moi entre 7 et 10 heures.
Annette Scherer”.
– Dieu, quelle virulente sortie – отвечал, нисколько не
смутясь такою встречей, вошедший князь, в придворном, шитом мундире, в
чулках, башмаках, при звездах, с светлым выражением плоского лица. Он
говорил на том изысканном французском языке, на котором не только говорили,
но и думали наши деды, и с теми тихими, покровительственными интонациями,

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version