Ich habe erfolgreich Datendateien analysiert, die ich mit einem einfachen Python-Skript, das ich geschrieben habe, erhalte. Die Dateien, die ich bekommen sind wie folgt aus:Python 3.5.1 Mischzeilencode-Datei UTF-8 und UTF-16
datei.txt, ~ 50 Spalten von Daten, x 1000s Reihen
abcd1,1234a,efgh1,5678a,ijkl1 ...etc
abcd2,1234b,efgh2,5678b,ijkl2 ...etc
...
Unfortunatly, manchmal einige der Linien UTF-16 Symbole enthalten, und wie folgt aussehen
abcd1,12341,efgh1,UTF-16 symbols here,ijkl1 ...etc
abcd2,1234b,efgh2,5678b,ijkl2 ...etc
...
ich in der Lage gewesen, die "Latin-1" Codierung für Befehle in meinem Skript zu implementieren wie:
open('file fixed.txt', 'w', encoding="latin-1").writelines([line for line in open('file.txt', 'r', encoding="latin-1"])
Mein Problem liegt in Code wie:
for line in fileinput.Fileinput('file fixed.txt', inplace=1):
line = line.replace(":",",")
print (line, ",")
Ich bin nicht in der Lage, vorbei an den Codierungsfehler für den letzten Befehl zu erhalten. Ich habe versucht, die Codierung der Durchsetzung:
# -*- coding: latin-1 -*-
Am oberen Rand des Dokuments sowie vor dem zuletzt genannten Befehl (Suchen und Ersetzen). Wie kann ich gemischte codierte Dateien zur Verarbeitung für den obigen Befehl erhalten? Ich möchte die UTF-16 (Unicode) -Symbole so beibehalten, wie sie in der neuen Datei erscheinen. Danke im Voraus.
EDIT: Dank Alexis konnte ich feststellen, dass Filinput nicht für die Einstellung einer anderen Kodierungsmethode funktionieren würde. Ich habe das Folgende benutzt, um mein Problem zu lösen.
f = open(filein,'r', encoding="latin-1")
filedata = f.read()
f.close()
newdata = filedata.replace("old data","new data")
f = open(fileout,'w', encoding="latin-1")
f.write(newdata)
f.close()
Es macht keinen Sinn, eine Datei zu haben, die Daten in mehreren verschiedenen Kodierungen enthält. Ist deine Datei * all * in UTF-8? Wenn nicht, müssen Sie wahrscheinlich etwas "operieren", um alles in eine einzige Kodierung zu bringen. Beachten Sie auch, dass es kein UTF-16-Symbol gibt. Sie können Unicode-Symbole mit einer beliebigen Unicode-Codierung codieren. – BrenBarn
(Übrigens, das '# - * - Coding'-Ding ist hier ein Ablenkungsmanöver. Das spezifiziert nur die Kodierung Ihrer Python-Quelldatei; es beeinflusst nicht, was mit eingelesenen Datendateien passiert.) – BrenBarn
Also was machen diese "UTF-16-Symbole" sehen aus? Wie hast du herausgefunden, dass das UTF-16 war? – roeland