2017-02-08 9 views
0

Ich muss den Inhalt einer CSV-Datei mit Python lesen. Jedoch, wenn ich diesen Code ausführen:Wie behebt man ein Problem mit der Kodierung?

with(open(self.path, 'r')) as csv_file: 
    csv_reader = csv.reader(csv_file, dialect=csv.excel, delimiter=';') 
    self.data = [[cell for cell in row] for row in csv_reader] 

ich diesen Fehler:

File "C:\Python36\lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] 
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 1137: character maps to <undefined> 

Mein Verständnis ist, dass diese Datei nicht in cp-1252 codiert wurde, und dass ich herausfinden müssen, was Codierung war benutzt. Ich habe einiges ausprobiert, aber im Moment hat nichts funktioniert.

über die Datei:

  • Es wird von einem externen Unternehmen gesendet wird, kann ich nicht mehr Informationen über sie hat.
  • Es kommt mit anderen ähnlichen Dateien, mit denen ich habe kein Problem, wenn ich den gleichen Code ausführen
  • Es hat eine Erweiterung .xls, ist aber eine CSV-Datei mit Semikolons getrennt
  • Wenn ich öffne Mit Excel wird es im Kompatibilitätsmodus geöffnet. Aber ich sehe kein Codierproblem: alles zeigt richtig an.

Was ich schon versucht:

  • es unter einem anderen Dateiformat Speicher des Kompatibilitätsmodus loszuwerden
  • eine Codierung in der ersten Zeile von meinem Code hinzufügen: (I versucht, einige mehr oder Codierungen, die ich kenne zufällig weniger)

    mit (open (self.path, 'r', encoding = 'utf8')) als csv_file:

  • Kopieren Sie den Inhalt der Datei in eine neue Datei oder löschen Sie den gesamten Inhalt der Datei. Funktioniert immer noch nicht. Dieser nervt mich wirklich, weil ich denke, dass es bedeutet, dass das Problem nicht im Inhalt der Datei und nicht in der Datei selbst liegt.

  • Suchen Sie überall viel wie Sie diese Art von Problem zu lösen.
+0

Sie könnten versuchen, die Datei mit 'Pandas' oder' openpyxl' zu lesen. –

+0

Python 2 oder Python 3? (Kann relevant sein). – nigel222

+0

Wenn es direkt in Excel geöffnet wird, versuchen Sie, von Excel in eine andere CSV-Datei zu speichern. Dies könnte die Codierungsprobleme lösen, ohne dass Sie genau herausfinden müssen, was falsch war. Oder es könnte nicht ... – nigel222

Antwort

0

fand ich endlich eine Art von Lösung:!

  1. Öffnen Sie die Datei mit Excel
  2. Anzeige die Datei ordnungsgemäß mit das "Text to Columns" -Feature
  3. Speichern Sie die Datei im CSV-Format
  4. Run t er Code

Das genügt mir nicht ganz, aber es funktioniert. Ich verstehe immer noch nicht, was das Problem eigentlich ist, und warum es das löste, also bin ich an irgendwelchen zusätzlichen Informationen interessiert!

0

Ich empfehle die Verwendung von Pandas-Bibliothek (sowie numpy), es ist sehr praktisch, wenn es um Datenmanipulation kommt. Diese Funktion importiert die Daten aus einem xlsx- oder csv-Dateityp.

/\ change datapath nach Ihren Bedürfnissen/\

import os 
import pandas as pd 

def GetData(directory, dataUse, format): 
    dataPath = os.getcwd() + "\\Data\\" + directory + "\\" + dataUse + "Set." + format 
    if format == "xlsx": 
     dataSet = pd.read_excel(dataPath, sheetname = 'Sheet1') 
    elif format == "csv": 
     dataSet = pd.read_csv(dataPath) 
    return dataSet 
+0

Es löst das Problem nicht. Ich bekomme die Fehlermeldung: 'Datei" pandas \ parser.pyx ", Zeile 535, in pandas.parser.TextReader .__ cinit__ (pandas \ parser.c: 6086) Datei" pandas \ parser.pyx ", Zeile 740, in pandas.parser.TextReader._get_header (pandas \ parser.c: 9266) UnicodeDecodeError: 'utf-8' Codec kann Byte 0xd0 in Position 0 nicht dekodieren: ungültiges Fortsetzungsbyte' – adurivault

+0

Wissen Sie, wie Ihre Datei codiert ist? –

+0

Nein, ich habe nicht ... Ich habe versucht, es herauszufinden, aber es ist mir nicht gelungen, – adurivault

Verwandte Themen