web-dev-qa-db-fra.com

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

J'essaie de lire un fichier .csv dans Python (Spyder), mais je continue à avoir 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: (erreur unicode) le codec 'unicodeescape' ne peut pas décoder les octets en position 2-3: un\échappement\UXXXXXXXX tronqué

J'ai essayé de remplacer le\par\ou par/et j'ai essayé de mettre un r avant "C .. mais tout cela n'a pas fonctionné.

121
Miesje

Cette erreur se produit parce que vous utilisez une chaîne normale en tant que chemin. Vous pouvez utiliser l’une des solutions suivantes pour résoudre votre problème.

  1. Il suffit de mettre r avant votre chaîne normale pour la convertir en 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")
164
DeePak M. Birajdar

La première barre oblique inversée de votre chaîne est interprétée comme un caractère spécial, car elle est suivie d'un "U", elle est interprétée comme le début d'un point de code Unicode.

Pour résoudre ce problème, vous devez échapper aux barres obliques inverses de la chaîne. Je ne sais pas Python spécifiquement, mais je suppose que vous le feriez en doublant les barres obliques inverses:

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

Vous pouvez simplement mettre rdevant la chaîne avec votre chemin actuel, qui désigne une chaîne brute. Par exemple:

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

Essayez d’écrire le chemin du fichier sous la forme "C:\\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener" i.e avec une double barre oblique inversée après le lecteur, par opposition à "C:\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener"

10
Ibrahim Isa

considérez-le comme une chaîne brute. Juste une réponse simple, ajoutez r avant votre chemin Windows.

import csv
data = open(r"C:\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener")
data = csv.reader(data)  
print(data)
10
Ramineni Ravi Teja

Selon littéraux de chaîne :

Les littéraux de chaîne peuvent être placés entre guillemets simples (c'est-à-dire _'...'_) ou guillemets doubles (c'est-à-dire _"..."_). Ils peuvent également être enfermés dans des groupes correspondants de trois guillemets simples ou doubles (ils sont généralement désignés sous le terme de chaînes à trois guillemets).

Le caractère barre oblique inverse (c'est-à-dire _\_) est utilisé pour échapper des caractères qui, autrement, auront une signification spéciale, telle que nouvelle ligne, barre oblique inversée elle-même ou le caractère de citation. Les littéraux de chaîne peuvent éventuellement être précédés de la lettre r ou R. Ces chaînes sont appelées chaînes brutes et utilisent des règles différentes pour les séquences d'échappement avec une barre oblique inversée.

Dans les chaînes à trois guillemets, nouvelles lignes non échappées et guillemets sont autorisées, sauf que les trois guillemets non échappés dans une rangée terminer la chaîne.

Sauf si un préfixe r ou R est présent, les séquences d'échappement des chaînes sont interprétées conformément à des règles similaires à celles utilisées par la norme C.

Donc, idéalement, vous devez remplacer la ligne:

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

À l'un des personnages suivants:

  • Utilisation de raw préfixe et guillemets simples (i.e. _'...'_):

    _data = open(r'C:\Users\miche\Documents\school\jaar2\MIK\2.6\vektis_agb_zorgverlener')
    _
  • Utilisation de guillemets doubles (c'est-à-dire _"..."_) et du caractère de barre oblique inverse (c.-à-d. _\_):

    _data = open("C:\\Users\\miche\\Documents\\school\\jaar2\\MIK\\2.6\\vektis_agb_zorgverlener")
    _
  • Utilisation de guillemets doubles (c'est-à-dire _"..."_) et du caractère de barre oblique vers l'avant (c'est-à-dire _/_):

    _data = open("C:/Users/miche/Documents/school/jaar2/MIK/2.6/vektis_agb_zorgverlener")
    _
7
DebanjanB

cela a fonctionné pour moi en neutralisant le '\' par f = open ('F: \\ file.csv')

3
vinod

Il suffit de mettre un r devant.

par exemple:

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

Le double\devrait fonctionner pour Windows, mais vous devez toujours vous occuper des dossiers que vous mentionnez dans votre chemin. Tous (sauf le nom de fichier) doivent exister. sinon vous obtiendrez une erreur.

0
G4W