Python leyendo de un archivo y guardando en utf-8

Tengo problemas para leer un archivo, procesar su cadena y guardar en un archivo UTF-8.

Aquí está el código:

try: filehandle = open(filename,"r") except: print("Could not open file " + filename) quit() text = filehandle.read() filehandle.close() 

Entonces hago un poco de procesamiento en el texto variable.

Y entonces

 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() 

Esto genera el archivo perfectamente pero lo hace en ISO 8859-15 de acuerdo con mi editor. Dado que el mismo editor reconoce el archivo de entrada (en la variable nombre de archivo) como UTF-8, no sé por qué sucedió esto. En la medida en que mi investigación ha mostrado las líneas comentadas debería resolver el problema. Sin embargo, cuando uso esas líneas, el archivo resultante tiene un carácter especial principalmente, palabras con tilde ya que el texto está en español. Realmente agradecería cualquier ayuda ya que estoy perplejo …

Procese el texto hacia y desde Unicode en los límites de E / S de su progtwig utilizando el módulo de codecs :

 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) 

Edición: el módulo io ahora se recomienda en lugar de los códecs y es compatible con la syntax open Python 3:

 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) 

También puedes hacerlo a través del siguiente código:

 file=open(completefilepath,'r',encoding='utf8',errors="ignore") file.read() 

No puedes hacer eso usando abierto. utilizar codecs.

cuando abra un archivo en python utilizando la función incorporada abierta, siempre leerá / escribirá el archivo en ascii. Para escribirlo en utf-8 intente esto:

 import codecs file = codecs.open('data.txt','w','utf-8')