web-dev-qa-db-fra.com

Python lecture d'un fichier et sauvegarde dans utf-8

J'ai des problèmes pour 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 quelques traitements 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 en iso 8859-15 selon mon éditeur. Comme le même éditeur reconnaît le fichier d'entrée (dans la variable nomfichier) comme UTF-8, je ne sais pas pourquoi. Pour autant que ma recherche ait montré les lignes commentées devraient résoudre le problème. Cependant, lorsque j'utilise ces lignes, le fichier résultant contient des charabias avec des caractères spéciaux, principalement des mots avec tilde, le texte étant en espagnol. J'apprécierais vraiment toute aide, car je suis perplexe ...

65
aarelovich

Traitez le texte depuis et vers Unicode aux limites d’entrée/sortie de votre programme à l’aide du 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 de Python 3 de _ 3: open:

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)
161
Mark Tolonen

Vous pouvez également le traverser par le code ci-dessous:

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

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

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

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