Ошибка Unicode unicodeescape "кодек не может декодировать байты. Невозможно открыть текстовые файлы в Python 3

Я использую Python 3.1 на машине с Windows 7. Русский язык является системным языком по умолчанию, а кодировка по умолчанию - utf-8.

Глядя на ответ на предыдущий вопрос, я пытался использовать модуль кодеков, чтобы подарить мне немного удачи. Вот несколько примеров:

>>> g = codecs.open("C:\Users\Eric\Desktop\beeline.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#39>, line 1)
>>> g = codecs.open("C:\Users\Eric\Desktop\Site.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#40>, line 1)
>>> g = codecs.open("C:\Python31\Notes.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 11-12: malformed \N character escape (<pyshell#41>, line 1)
>>> g = codecs.open("C:\Users\Eric\Desktop\Site.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#44>, line 1)

Моя последняя идея заключалась в том, что я подумал, что это могло быть связано с тем, что Windows переводит несколько папок, таких как папка пользователей, на русский язык (хотя ввод пользователей по-прежнему является правильным путем), поэтому я попробовал это в папке Python31. Тем не менее, не повезло. Любые идеи?


person Eric    schedule 28.08.2009    source источник
comment
@Wahnfrieden Что? Python 2 будет постепенно прекращен, поэтому имеет смысл использовать Python 3, несмотря на его незрелость.   -  person Humphrey Bogart    schedule 24.02.2010
comment
@Beau Martinez @orip (значительное) отсутствие поддержки библиотеки - достаточно веская причина для большинства случаев. Благодаря обратному портированию функций Py3k на Python 2.6 и 2.7, последующий перенос на 3.x в любом случае будет легким, и вы не жертвуете огромным объемом поддержки библиотек (что особенно опасно, если вы новый пользователь и можете не предугадываю, какие библиотеки вам нужны).   -  person aehlke    schedule 25.02.2010
comment
Строковые литералы по умолчанию в Python 3 - это строки в Юникоде, поэтому \u активен, и поэтому строковый литерал '\ufoo' вызывает SyntaxError. В Python 2 строковые литералы по умолчанию не являются строками Unicode, поэтому \u неактивен, и, следовательно, строковый литерал '\ufoo' не вызывает никаких ошибок. Напротив, строковый литерал b'\ufoo' не вызывает ошибку в Python 3, а строковый литерал u'\ufoo' действительно вызывает ошибку в Python 2.   -  person Ioannis Filippidis    schedule 08.04.2021


Ответы (10)


Проблема в строке

"C:\Users\Eric\Desktop\beeline.txt"

Здесь \U в _3 _... запускает восьмисимвольный escape-код Unicode, например \U00014321. В вашем коде за escape-символом следует символ 's', что недопустимо.

Вам либо нужно продублировать все обратные косые черты:

"C:\\Users\\Eric\\Desktop\\beeline.txt"

Или префикс строки с r (для создания необработанной строки):

r"C:\Users\Eric\Desktop\beeline.txt"
person Martin v. Löwis    schedule 28.08.2009
comment
Хахаха ... В какую ловушку легко попасть, как я только что попал. Отличный ответ. - person Humphrey Bogart; 24.02.2010
comment
Я обнаружил эту ошибку в строке документации функции при переносе кода 2.x на python3. - person Sridhar Ratnakumar; 29.04.2010
comment
Я столкнулся с этой ошибкой, когда использовал комментарии ''' в тройных кавычках вокруг раздела кода, который содержал необработанную строку с \U в ней. I.E. строка не выдавала мне ошибки, пока я не попытался ее прокомментировать. По этой причине метод двойной обратной косой черты может быть предпочтительнее. - person Chris Mueller; 22.05.2015
comment
Я добавляю к строке префикс r, но это все равно вызывает ошибку. - person Bobort; 18.10.2016
comment
У меня такая же ошибка, но моя строка является переменной. Невозможно поставить перед переменной букву r. Как мне решить эту проблему? - person Reman; 30.11.2017
comment
Третье решение (также предложенное @Adam Baylin Autuori) - заменить '\' на '/' в пути. Python понимает как '\' (стиль Windows), так и '/' (стиль Unix) как разделитель каталогов. - person Jona; 17.04.2018
comment
Этот ответ мне тоже не подходит. Если я прав, тот факт, что обратная косая черта удваивается, делает каталог неправильным, поэтому я получаю FileNotFoundError. - person Outcast; 21.06.2018
comment
просто супер! ... - person forkdbloke; 20.05.2020

Типичная ошибка в Windows, поскольку каталог пользователя по умолчанию - C:\user\<your_user>, поэтому, когда вы хотите передать этот путь в качестве строкового аргумента в функцию Python, вы получите ошибку Unicode только потому, что \u - это escape-код Unicode. Если следующие 8 символов после \u не являются числовыми, возникает ошибка.

Чтобы решить эту проблему, просто удвойте обратную косую черту: C:\\user\\<\your_user>... Это гарантирует, что Python будет обрабатывать одиночные обратные косые черты как одиночные обратные косые черты.

person Julio Cesar    schedule 12.03.2015

Префикс 'r' работает очень хорошо, но он должен быть в правильном синтаксисе. Например:

passwordFile = open(r'''C:\Users\Bob\SecretPasswordFile.txt''')

Здесь нет необходимости \\ - поддерживает удобочитаемость и хорошо работает.

person Fiddy Bux    schedule 16.08.2017
comment
Как работает тройная кавычка, а не двойная двойная кавычка? Я пробовал, и тройная одинарная цитата работала как шарм, но все остальное с треском провалилось, не могли бы вы объяснить - person Brainiac; 18.03.2021

С Python 3 у меня была такая проблема:

 self.path = 'T:\PythonScripts\Projects\Utilities'

произвел эту ошибку:

 self.path = 'T:\PythonScripts\Projects\Utilities'
            ^
 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in
 position 25-26: truncated \UXXXXXXXX escape

исправление, которое сработало:

 self.path = r'T:\PythonScripts\Projects\Utilities'

Кажется, что '\ U' вызывал ошибку, а 'r' перед строкой отключает восьмисимвольный escape-код Unicode (для необработанной строки), который давал сбой. (Это немного чрезмерное упрощение, но оно работает, если вас не волнует юникод)

Надеюсь, это кому-то поможет

person Matthew Cox    schedule 21.12.2017
comment
Это ничего не добавляет к принятому ответу. - person tripleee; 30.03.2019


У меня была такая же ошибка в python 3.2.

У меня есть скрипт для отправки электронной почты и:

csv.reader(open('work_dir\uslugi1.csv', newline='', encoding='utf-8'))

когда я удаляю первый символ в файле uslugi1.csv, работает нормально.

person user2859901    schedule 08.10.2013
comment
Это было бы обходным путем, но правильный ответ указан выше. - person Johnny; 18.11.2017

path = pd.read_csv(**'C:\Users\mravi\Desktop\filename'**)

Ошибка связана с указанным путем

Добавьте 'r' перед путем

path = pd.read_csv(**r'C:\Users\mravi\Desktop\filename'**)

Это сработает нормально.

person Ravi Teja Mureboina    schedule 25.05.2018

Обратитесь к документу openpyxl, вы можете внести следующие изменения.

from openpyxl import Workbook
from openpyxl.drawing.image import Image

wb = Workbook()
ws = wb.active
ws['A1'] = 'Insert a xxx.PNG'
# Reload an image
img = Image(**r**'x:\xxx\xxx\xxx.png')
# Insert to worksheet and anchor next to cells
ws.add_image(img, 'A2')
wb.save(**r**'x:\xxx\xxx.xlsx')
person Deepika Anand    schedule 08.02.2015
comment
Пожалуйста, подумайте о редактировании вашего сообщения, чтобы добавить больше объяснений о том, что делает ваш код и почему он решает проблему. Ответ, который в основном просто содержит код (даже если он работает), обычно не помогает OP понять их проблему. - person SuperBiasedMan; 03.11.2015
comment
Спасибо @Deepika Anand, это работает, не могли бы объяснить, как? Спасибо - person Java.beginner; 26.11.2015
comment
См. Официальную документацию на странице: docs.python.org/2/howto/unicode.html. особенно строка. В исходном коде Python литералы Unicode записываются как строки с префиксом «u» или «U»: u'abcdefghijk '. Конкретные кодовые точки могут быть записаны с помощью escape-последовательности \ u, за которой следуют четыре шестнадцатеричные цифры, обозначающие кодовую точку. Управляющая последовательность \ U аналогична, но ожидает 8 шестнадцатеричных цифр, а не 4. - person Deepika Anand; 28.11.2015

У меня была такая же ошибка, только что удалил и снова установил пакет numpy, который работал!

person Andrushenko Alexander    schedule 04.05.2017
comment
Возможно, это сработало для вас и может помочь другим, но было бы хорошо, если бы вы могли объяснить, почему это сработало, чтобы предоставить другим потенциально жизнеспособное решение, если метод переустановки не удастся. Не волнуйтесь, если нет. На данном этапе обучения у меня нет четкого представления, почему в этом случае сработала переустановка numpy. - person Fiddy Bux; 07.12.2018

У меня была такая ошибка. У меня есть основной скрипт Python, который вызывает функции из другого, второго скрипта Python. В конце первого скрипта у меня был блок комментариев, обозначенный ''' '''. Я получал эту ошибку из-за этого блока кода комментирования. Я повторил ошибку несколько раз, как только нашел ее, чтобы убедиться, что это ошибка, и так оно и было. Я до сих пор не понимаю, почему.

person PCSailor    schedule 22.09.2018