486 votes

Erreur "(erreur unicode) le codec 'unicodeescape' ne peut pas décoder les octets en position '2-3 : échappement \UXXXXXXXX tronqué"

Je essaie de lire un fichier CSV dans Python (Spyder), mais je continue de recevoir une erreur. Mon code:

import csv

data = open("C:\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener")
data = csv.reader(data)
print(data)

Je reçois l'erreur suivante:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

J'ai essayé de remplacer le \ par \\ ou par / et j'ai essayé de mettre un r avant "C.., mais toutes ces choses n'ont pas fonctionné.

12 votes

Comment vos solutions alternatives n'ont-elles pas fonctionné ? Je m'attendrais à ce qu'une chaîne brute ou une chaîne avec / à la place de `\` fonctionne très bien.

0 votes

Lorsque j'utilise des doubles barres obliques, le programme indique que le fichier que je veux ouvrir n'existe pas.

1 votes

Utilisez le '\\' barre oblique au lieu de la barre oblique inverse tout en spécifiant le chemin C:/Users/user/Videos modifié en C:\Users\user\Videos.

816voto

Cette erreur se produit parce que vous utilisez une chaîne normale comme chemin d'accès. Vous pouvez utiliser l'une des trois solutions suivantes pour résoudre votre problème :

1: Ajoutez simplement r avant votre chaîne normale. Cela convertit une chaîne normale en une chaîne brute :

pandas.read_csv(r"C:\Users\DeePak\Desktop\myac.csv")

2:

pandas.read_csv("C:/Users/DeePak/Desktop/myac.csv")

3:

pandas.read_csv("C:\\Users\\DeePak\\Desktop\\myac.csv")

28 votes

J'aime la 2ème option, elle rend le chemin portable entre Windows et Linux. Merci à Python de protéger la particularité de Windows.

4 votes

Merci mec. La première réponse a résolu mon problème. Tout ce que j'ai fait était d'ajouter le r pour rendre ma chaîne brute.

0 votes

Dans mon cas, seul un \ avant le premier \ a fonctionné : C: \\ Utilisateurs\DeePak\Desktop ...

106voto

thomasrutter Points 42905

Le premier antislash dans votre chaîne de caractères est interprété comme un caractère spécial. En fait, parce qu'il est suivi d'un "U", il est interprété comme le début d'un point de code Unicode.

Pour corriger cela, vous devez échapper les antislashs dans la chaîne de caractères. La façon directe de le faire est en doublant les antislashs :

data = open("C:\\Users\\miche\\Documents\\school\\jaar2\\MIK\\2.6\\vektis_agb_zorgverlener")

Si vous ne voulez pas échapper les antislashs dans une chaîne de caractères, et que vous n'avez pas besoin de codes d'échappement ou de guillemets dans la chaîne, vous pouvez plutôt utiliser une chaîne "raw", en utilisant "r" juste avant celle-ci, comme ceci :

data = open(r"C:\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener")

2 votes

Lorsque j'utilise des doubles barres obliques, le programme indique que le fichier que je veux ouvrir n'existe pas.

3 votes

Cela semble prometteur car cela signifie qu'il considère désormais la chaîne comme valide

2 votes

D'accord. Donc le problème suivant est que le chemin du fichier n'existe pas. Avez-vous omis une extension de fichier, par exemple vektis_agb_zorgverlener.txt? L'Explorateur Windows masquera les extensions de fichier par défaut parce que c'est stupide; vous pouvez le corriger cependoi.

50voto

Mohit Solanki Points 760

Vous pouvez simplement mettre r devant la chaîne avec votre chemin actuel, ce qui signifie une chaîne brute. Par exemple :

data = open(r"C:\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener")

2 votes

Pour des raisons de complétude, cela supprime la possibilité d'échapper à des caractères, y compris un guillemet, au sein de la chaîne, ce qui signifie simplement qu'elle ne peut pas être utilisée pour des chaînes contenant un guillemet, mais c'est parfaitement approprié ici.

24voto

Ibrahim Isa Points 81

Essayez d'écrire le chemin du fichier comme "C:\\Utilisateurs\miche\Documents\ecole\annee2\MIK\2.6\vektis_agb_zorgverlener", c'est-à-dire avec deux anti-slashs après le lecteur, par rapport à "C:\Utilisateurs\miche\Documents\ecole\annee2\MIK\2.6\vektis_agb_zorgverlener"

3 votes

Cela fonctionne ! Pourriez-vous s'il vous plaît dire pourquoi le double slash après le lecteur fonctionne?

0 votes

Je pense que c'est parce que \U dans \Utilisateurs est vu par l'analyseur comme "voici de l'Unicode" et que l'analyseur est triste lorsque rien n'est fourni. Vous auriez besoin de \\U n'importe où, comme dans c:\pasdutilisateurs\\Utilisateurs aussi.

8voto

Hydrogirl Points 948

Il suffit de mettre un "r" devant fonctionne bien.

par exemple:

  white = pd.read_csv(r"C:\Users\hydro\a.csv")

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