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....
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)
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')
Vous pouvez également passer à travers par le code ci-dessous:
file=open(completefilepath,'r',encoding='utf8',errors="ignore")
file.read()