2016-08-11 6 views
0

Ich habe dieses ProgrammFehler beim Lesen der CSV-Datei unicodeescape

import csv 

with open("C:\Users\frederic\Desktop\WinPython-64bit-3.4.4.3Qt5\notebooks\scores.txt","r") as scoreFile: 
    # write = w, read = r, append = a 
    scoreFileReader = csv.reader(scoreFile) 
    scoreList = [] 
    for row in scoreFileReader: 
     if len (row) != 0: 
      scoreList = scoreList + [row] 

scoreFile.close() 

print(scoreList) 

Warum ich diesen Fehler?

with open("C:\Users\frederic\Desktop\WinPython-64bit-3.4.4.3Qt5\notebooks\scores.txt","r") as scoreFile: ^SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape.

+0

Mögliches Duplikat [Python offene Datei Unicode-Fehler] (http://stackoverflow.com/questions/18276283/python-open-file-unicode-error) –

Antwort

0

Sie dies versuchen können:

import csv 
import io 

def guess_encoding(csv_file): 
    """guess the encoding of the given file""" 
    with io.open(csv_file, "rb") as f: 
     data = f.read(5) 
    if data.startswith(b"\xEF\xBB\xBF"): # UTF-8 with a "BOM" 
     return ["utf-8-sig"] 
    elif data.startswith(b"\xFF\xFE") or data.startswith(b"\xFE\xFF"): 
     return ["utf-16"] 
    else: # in Windows, guessing utf-8 doesn't work, so we have to try 
     try: 
      with io.open(csv_file, encoding="utf-8") as f: 
       preview = f.read(222222) 
       return ["utf-8"] 
     except: 
      return [locale.getdefaultlocale()[1], "utf-8"] 

encodings = guess_encoding(r"C:\Users\frederic\Desktop\WinPython-64bit-3.4.4.3Qt5\notebooks\scores.txt")[0]) 

# then your code with 
with open(r"C:\Users\frederic\Desktop\WinPython-64bit-3.4.4.3Qt5\notebooks\scores.txt","r", encoding=encodings[0]) as scoreFile: 
0

Sie müssen rohe Strings verwenden, mit dem Windows-Stil Dateinamen:

with open(r"C:\Users\frederic\Desktop\WinPython-64bit-3.4.4.3Qt5\notebooks\scores.txt", 'r') as scoreFile: 
     ^^ 

Andernfalls Python-String-Engine glaubt, dass \ U das ist Beginn einer Unicode-Escape-Sequenz - was natürlich in diesem Fall nicht der Fall ist.


Auch vorsichtig sein, auch Ihre scoreFile.close() ist nutzlos:

Die with Anweisung einen Versuch und fangen ersetzen. Es schließt auch automatisch die Datei nach dem Block. Das bedeutet, dass Sie die Zeile scoreFile.close() löschen können.

Auch können Sie die Zeile if len(row) != 0 Nach PEP8 ändern:

For sequences, (strings, lists, tuples), use the fact that empty sequences are false.

Yes: if not seq: if seq:

No: if len(seq): if not len(seq):

Eine letzte Sache, Ihre for loop ist auch nicht gut, zu lesen csv Sie beginnen, sich besser ein Beispiel aus dem doc ersten Kopieren!

with open('eggs.csv', 'rb') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') 
    for row in spamreader: 
     print ', '.join(row)