Frage

Jedes Mal, wenn ich versuche, eine CSV-Datei mit dem Befehl python zu öffnen fread = open('input.csv', 'r') es öffnet sich immer die Datei mit Leerzeichen zwischen jedem einzelnen Charakter. Ich vermute, es ist etwas falsch mit der Textdatei ist, weil ich andere Textdateien mit dem gleichen Befehl öffnen kann, und sie sind richtig geladen. Weiß jemand, warum eine Textdatei, wie dies in Python laden würde?

Danke.

Aktualisieren

Ok, ich habe es mit Hilfe von Jarret Hardie der Post

Dies ist der Code, den ich verwenden, um die Datei zu ascii konvertieren

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

Danke!

War es hilfreich?

Lösung

Der Beitrag von rekursiven wahrscheinlich richtig ist ... der Inhalt der Datei wahrscheinlich mit einem Multi-Byte-Zeichensatz codiert. Wenn dies in der Tat können den Fall, dass Sie wahrscheinlich die Datei in Python lesen, ohne sich mit ihm konvertieren ersten außerhalb von Python.

Versuchen Sie so etwas wie:

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')

Die ‚b‘ Flag sorgt die Datei als binäre Daten gelesen werden. Sie müssen wissen (oder erraten), um die ursprüngliche Codierung ... in diesem Beispiel habe ich verwendet utf-16, aber YMMV. Dadurch wird die Datei in Unicode konvertieren. Wenn Sie wirklich eine Datei mit Multi-Byte-Zeichen haben, empfehle ich nicht Umwandlung in ascii, wie Sie können am Ende im Prozess viele der Zeichen zu verlieren.

EDIT: Danke für die Datei hochladen. Es gibt zwei Bytes an der Vorderseite der Datei, die anzeigt, dass es sich tatsächlich eine breite charset verwenden. Wenn Sie neugierig sind, öffnen Sie die Datei in einem Hex-Editor, wie einige vorgeschlagen haben ... Sie etwas in der Textversion wie sehen werden ‚I.D. |.‘ (usw). Der Punkt ist das zusätzliche Byte für jedes Zeichen.

Der Code-Snippet oben scheint mit dieser Datei auf meinem Rechner zu arbeiten.

Andere Tipps

Die Datei wird in einigen Unicode-Codierung verschlüsselt, aber Sie es als ascii lesen. Versuchen Sie die Datei in ASCII zu konvertieren, bevor es in Python verwendet wird.

Ist das nicht eine einfache txt-Datei CSV mit comma separated values. Probieren Sie es mit einem Texteditor zu öffnen, um zu sehen, ob die Datei korrekt gebildet wird.

Um eine verschlüsselte Datei zu lesen, können Sie einfach ersetzen open mit codecs.open.

fread = codecs.open('input.csv', 'r', 'utf-16')

Es hat mir nie aufgetreten, sondern als Truppo sagte, muss es etwas falsch mit der Datei sein.

Versuchen Sie die Datei in Excel / BrOffice Calc und Speichern unter der Datei als CSV- wieder zu öffnen.

Wenn das Problem weiterhin besteht, versuchen, eine Teilmenge der Daten:. Faust 10 / letzte 10 / Zwischen 10 Zeilen der Datei

Ok, ich habe es mit Hilfe von Jarret Hardie der Post

Dies ist der Code, den ich verwenden, um die Datei zu ascii konvertieren

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

Danke!

Öffnen Sie die Datei in Binär-Modus, 'rb'. Prüfen Sie es in einem Hex-Editor und überprüfen Sie auf Null padding '00'. Öffnen Sie die Datei in so etwas wie Scintilla Text Editor die Zeichen zu lesen, die in der Datei.

Hier ist die schnelle und einfache Möglichkeit, besonders wenn Python wird die Eingabe nicht korrekt analysiert

sed 's/ \(.\)/\1/g'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top