Tengo problemas para leer un archivo, procesar su cadena y guardarlo 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()
Luego 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 según mi editor. Dado que el mismo editor reconoce el archivo de entrada (en el nombre de archivo variable) como UTF-8, no sé por qué sucedió esto. Por lo que mi investigación ha demostrado, las líneas comentadas deberían resolver el problema. Sin embargo, cuando utilizo esas líneas, el archivo resultante tiene un galimatías en caracteres especiales principalmente, palabras con tilde ya que el texto está en español. Realmente agradecería cualquier ayuda ya que estoy perplejo ...
python
python-2.7
utf-8
aarelovich
fuente
fuente
Respuestas:
Procese texto hacia y desde Unicode en los límites de E / S de su programa utilizando el
codecs
módulo: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)
Editar: el
io
módulo ahora se recomienda en lugar de códecs y es compatible con laopen
sintaxis de Python 3 , y si usa Python 3, puede usarloopen
si no requiere compatibilidad con Python 2.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)
fuente
open()
yio,open()
son lo mismo. Solo usaopen()
. Consulte la ayuda (abierta) y verá que es lo mismo que io.open (), incluso el encabezado dice Ayuda sobre la función incorporada abierta en el módulo io.io.open
espera que se escriban cadenas Unicode, no cadenas de bytes. Realiza la codificación a la codificación declarada.ascii
códec predeterminado , por lo que funcionará siempre que la cadena sea solo ASCII. Es por eso que Python 3 lo cambió ... evita que "funcionará a veces", lo cual es un error molesto de rastrear.También puede hacerlo mediante el siguiente código:
file=open(completefilepath,'r',encoding='utf8',errors="ignore") file.read()
fuente
No puedes hacer eso usando open. utilizar códecs.
cuando abre un archivo en python usando la función abierta incorporada, siempre leerá / escribirá el archivo en ascii. Para escribirlo en utf-8 intente esto:
import codecs file = codecs.open('data.txt','w','utf-8')
fuente