web-dev-qa-db-fra.com

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

J'utilise python 3.1, sur une machine Windows 7. Le russe est la langue par défaut du système et utf-8 est le codage par défaut.

En regardant la réponse à une question précédente , j'ai essayé d’utiliser le module "codecs" pour me donner 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 que je pensais que c’était peut-être le fait que Windows "traduisait" quelques dossiers, tels que le dossier "utilisateurs", en russe (bien que taper "utilisateurs" reste le bon chemin), j’ai donc le dossier Python31. Toujours pas de chance. Des idées?

162
Eric

Le problème est avec la chaîne

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

Ici, \U démarre un échappement Unicode de huit caractères, tel que '\ U00014321`. Dans votre code, l'échappement est suivi du caractère 's', qui n'est pas valide.

Vous devez dupliquer toutes les barres obliques inverses ou préfixer la chaîne par r (pour produire une chaîne brute).

355
Martin v. Löwis

Erreur typique sous Windows, car le répertoire utilisateur par défaut est C:\user\<your_user>. Ainsi, lorsque vous souhaitez utiliser ce chemin en tant que paramètre de chaîne dans une fonction Python, vous obtenez une erreur Unicode, simplement parce que \u est un échappement Unicode. Tout caractère non numérique après cela génère une erreur.

Pour le résoudre, il suffit de doubler les barres obliques inverses: C:\\\user\\\<\your_user>...

19
Julio Cesar

La préfixe avec 'r' fonctionne très bien, mais il faut que la syntaxe soit correcte. Par exemple:

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

Pas besoin de \\ [double-backslash] ici - maintient la lisibilité et fonctionne bien.

bien!

14
Fiddy Bux

Avec Python 3, j'ai eu ce problème:

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

produit cette erreur:

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

le correctif qui a fonctionné est:

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

Il semble que le '\ U' produisait une erreur et que le 'r' précédant la chaîne désactive l'échappement Unicode de huit caractères (pour une chaîne brute) qui échouait. (C'est un peu une simplification excessive, mais cela fonctionne si vous ne vous souciez pas de l'unicode)

J'espère que cela aide quelqu'un

4
Matthew Cox

Reportez-vous au document openpyxl, vous pouvez effectuer les modifications suivantes.

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
Deepika Anand

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

J'ai un 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, cela fonctionne bien.

2
user2859901

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

1

J'ai eu la même erreur, juste désinstallé et installé à nouveau le paquet numpy, cela a fonctionné!

 path = pd.read_csv (** 'C:\Utilisateurs\mravi\Bureau\nom_fichier' **) 

L'erreur est due au chemin mentionné 

Ajouter 'r' avant le chemin

 path = pd.read_csv (** r'C:\Utilisateurs\mravi\Bureau\nom de fichier '**) 

Cela fonctionnerait bien.

0

J'ai eu cette erreur ... J'ai un script Python principal qui appelle les fonctions d'un autre script, 2nd, script Python ... .. À la fin du premier script, j'avais un bloc de commentaires désigné par ''' '''. obtenir cette erreur à cause de ce bloc de code de commentaire . J'ai répété l'erreur plusieurs fois une fois que je l'ai trouvée pour m'assurer que c'était bien l'erreur, et c'était . Je ne sais toujours pas pourquoi.

0
PCSailor