Ich habe Probleme beim Lesen aus einer Datei, beim Verarbeiten ihrer Zeichenfolge und beim Speichern in einer UTF-8-Datei.
Hier ist der Code:
try:
filehandle = open(filename,"r")
except:
print("Could not open file " + filename)
quit()
text = filehandle.read()
filehandle.close()
Ich verarbeite dann den variablen Text.
Und dann
try:
writer = open(output,"w")
except:
print("Could not open file " + output)
quit()
#data = text.decode("iso 8859-15")
#writer.write(data.encode("UTF-8"))
writer.write(text)
writer.close()
Dies gibt die Datei perfekt aus, aber laut meinem Editor in ISO 8859-15. Da derselbe Editor die Eingabedatei (im variablen Dateinamen) als UTF-8 erkennt, weiß ich nicht, warum dies passiert ist. Soweit meine Forschung gezeigt hat, sollten die kommentierten Zeilen das Problem lösen. Wenn ich diese Zeilen verwende, enthält die resultierende Datei jedoch hauptsächlich Kauderwelsch in Sonderzeichen, Wörter mit Tilde, da der Text spanisch ist. Ich würde mich über jede Hilfe sehr freuen, da ich ratlos bin ...
python
python-2.7
utf-8
aarelovich
quelle
quelle
Antworten:
Verarbeiten Sie Text zu und von Unicode an den E / A-Grenzen Ihres Programms mithilfe des
codecs
Moduls:import codecs with codecs.open(filename, 'r', encoding='utf8') as f: text = f.read() # process Unicode text with codecs.open(filename, 'w', encoding='utf8') as f: f.write(text)
Bearbeiten: Das
io
Modul wird jetzt anstelle von Codecs empfohlen und ist mit der Python 3-open
Syntaxopen
kompatibel. Wenn Sie Python 3 verwenden, können Sie es nur verwenden, wenn Sie keine Python 2-Kompatibilität benötigen.import io with io.open(filename, 'r', encoding='utf8') as f: text = f.read() # process Unicode text with io.open(filename, 'w', encoding='utf8') as f: f.write(text)
quelle
open()
undio,open()
die gleichen sind. Einfach benutzenopen()
. Schauen Sie sich die Hilfe an (öffnen) und Sie werden sehen, dass sie mit io.open () identisch ist - sogar in der Überschrift steht Hilfe zu der im Modul io geöffneten integrierten Funktion.io.open
erwartet, dass Unicode-Zeichenfolgen geschrieben werden, keine Byte-Zeichenfolgen. Es führt die Codierung mit der deklarierten Codierung durch.ascii
, sodass es funktioniert, solange die Zeichenfolge nur ASCII ist. Das ist der Grund, warum Python 3 es geändert hat ... es verhindert, dass "es manchmal funktioniert", was ein nerviger Fehler ist, der aufgespürt werden muss.Sie können es auch mit dem folgenden Code durchstehen:
file=open(completefilepath,'r',encoding='utf8',errors="ignore") file.read()
quelle
Sie können das nicht mit open machen. Verwenden Sie Codecs.
Wenn Sie eine Datei in Python mit der integrierten Funktion zum Öffnen öffnen, lesen / schreiben Sie die Datei immer in ASCII. Um es in utf-8 zu schreiben, versuchen Sie Folgendes:
import codecs file = codecs.open('data.txt','w','utf-8')
quelle