Lecture Python à partir d'un fichier et enregistrement en utf-8

J'ai des problèmes à lire à partir d'un fichier, à traiter sa chaîne et à enregistrer dans un fichier UTF-8.

Voici le code:

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

text = filehandle.read()
filehandle.close()

Je fais ensuite un peu de traitement sur le texte variable.

, puis

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

Cette sortie du fichier parfaitement mais il le fait dans iso 8859-15 selon mon éditeur. Puisque le même éditeur reconnaît le fichier d'entrée (dans le nom de fichier variable) comme UTF-8, Je ne sais pas pourquoi cela s'est produit. Pour autant que mon reasearch a montré les lignes commentées devraient pour résoudre le problème. Cependant, lorsque j'utilise ces lignes, le fichier résultant a du charabia en caractère spécial principalement, des mots avec tilde car le texte est en espagnol. J'apprécierais vraiment toute aide car je suis perplexe....

45
demandé sur Hristo Iliev 2013-10-25 17:39:12

3 réponses

Traite le texte vers et depuis Unicode aux limites d'E / S de votre programme en utilisant le module 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)

Edit: le module io est maintenant recommandé à la place des codecs et est compatible avec la syntaxe open de 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)
125
répondu Mark Tolonen 2016-01-14 18:50:11

Vous ne pouvez pas le faire en utilisant open. utilisez des codecs.

Lorsque vous ouvrez un fichier en python à l'aide de la fonction ouverte intégrée, vous lisez/écrivez toujours le fichier en ascii. Pour l'écrire en utf-8, essayez ceci:

import codecs
file = codecs.open('data.txt','w','utf-8')
4
répondu Fernando Freitas Alves 2013-10-25 13:52:54

Vous pouvez également passer à travers par le code ci-dessous:

file=open(completefilepath,'r',encoding='utf8',errors="ignore")
file.read()
4
répondu Siva Kumar 2017-07-27 08:23:14