397 votes

"Unicode Error "unicodeescape" codec ne peut pas décoder les octets... Impossible d'ouvrir des fichiers texte en Python 3

J'utilise Python 3.1 sur une machine Windows 7. Le russe est la langue système par défaut, et utf-8 est l'encodage par défaut.

En regardant la réponse à une question précédente J'ai essayé d'utiliser le module "codecs" pour avoir un peu de chance. Voici quelques exemples :

>>> 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)

Ma dernière idée était, je pensais que cela pouvait être le fait que Windows "traduit" quelques dossiers, comme le dossier "users", en russe (bien que taper "users" soit toujours le chemin correct), donc j'ai essayé dans le dossier Python31. Toujours pas de chance. Avez-vous des idées ?

8 votes

@Wahnfrieden Quoi ? Python 2 est appelé à disparaître dans le futur, il est donc logique d'utiliser Python 3, malgré son "manque" de "maturité".

0 votes

@Beau Martinez @orip Le manque (important) de soutien de la part des bibliothèques est une raison suffisante dans la plupart des cas. Avec les fonctionnalités de Py3k rétroportées vers Python 2.6 et 2.7, le portage vers 3.x plus tard sera de toute façon facile, et vous ne sacrifiez pas une quantité énorme de support de bibliothèques (ce qui est particulièrement dangereux si vous êtes un nouvel utilisateur et que vous ne pouvez pas anticiper correctement les bibliothèques que vous voulez).

0 votes

Les chaînes de caractères par défaut de Python 3 sont des chaînes de caractères unicode, donc \u est actif, et donc la chaîne littérale '\ufoo' soulève un SyntaxError . En Python 2, les chaînes de caractères par défaut ne sont pas des chaînes unicode, donc \u est inactif, et donc la chaîne littérale '\ufoo' ne soulève aucune erreur. En revanche, la chaîne littérale b'\ufoo' fait pas soulève une erreur quelconque en Python 3, et le littéral chaîne de caractères u'\ufoo' fait soulève une erreur dans Python 2.

6voto

Ou vous pouvez remplacer '\' par '/' dans le chemin.

4 votes

Je vous conseille de prendre le visite et visitez le centre d'assistance . Votre réponse ne semble pas répondre à nos normes de qualité. Vous devez élaborer un peu plus pourquoi cela fonctionnerait, peut-être créer l'exemple de code complet.

0 votes

Bienvenue sur Stack Overflow ! Pensez à modifier votre message pour ajouter plus d'explications sur ce que fait votre code et pourquoi il résoudra le problème. Une réponse qui ne contient que du code (même s'il fonctionne) n'aide généralement pas le PO à comprendre son problème.

4voto

user2859901 Points 11

J'ai eu cette même erreur dans python 3.2.

J'ai script pour l'envoi d'email et :

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

quand je supprime le premier caractère du fichier uslugi1.csv fonctionne bien.

1 votes

Il s'agit d'une solution de rechange, mais la réponse correcte est indiquée ci-dessus.

3voto

Deepika Anand Points 307

En vous référant au document openpyxl, vous pouvez faire les changements suivants.

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')

3 votes

Veuillez envisager de modifier votre message pour ajouter plus d'explications sur ce que fait votre code et pourquoi il résoudra le problème. Une réponse qui ne contient que du code (même s'il fonctionne) n'aide généralement pas le PO à comprendre son problème.

0 votes

Merci @Deepika Anand, cela fonctionne, pouvez-vous m'expliquer comment ? thx

1 votes

Consultez la documentation officielle à la page : docs.python.org/2/howto/unicode.html . spécialement la ligne "Dans le code source Python, les littéraux Unicode sont écrits comme des chaînes de caractères préfixées par le caractère 'u' ou 'U' : u'abcdefghijk'. Des points de code spécifiques peuvent être écrits en utilisant l'option \u qui est suivie de quatre chiffres hexadécimaux donnant le point de code. Le site \U La séquence d'échappement est similaire, mais attend 8 chiffres hexadécimaux, et non 4."

2voto

J'ai eu la même erreur, j'ai juste désinstallé et réinstallé le paquet numpy, ça a marché !

0 votes

Cela a peut-être fonctionné pour vous, et cela pourrait bien aider d'autres personnes, mais il serait bon que vous expliquiez pourquoi cela a fonctionné, afin de fournir aux autres une solution potentiellement viable si la méthode de réinstallation échoue. Ne vous inquiétez pas, si ce n'est pas le cas. À ce stade de mon apprentissage, je n'ai pas non plus d'idée solide sur la raison pour laquelle une réinstallation de numpy a fonctionné dans ce cas.

1voto

PCSailor Points 23

J'ai eu cette erreur. J'ai un script python principal qui appelle des fonctions d'un autre script python, le deuxième. A la fin du premier script j'avais un bloc de commentaire désigné par . ''' ''' . J'obtenais cette erreur à cause de ce bloc de code à commenter. J'ai répété l'erreur plusieurs fois une fois que je l'ai trouvée pour m'assurer qu'il s'agissait bien de l'erreur, et c'était bien le cas. Je ne sais toujours pas pourquoi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X