Python lecture à partir d'un fichier et d'économie de l'utf-8
Je vais avoir des problèmes de lecture à partir d'un fichier, le traitement de la corde et de l'enregistrement 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 puis faire un peu de traitement sur le texte d'une variable.
Et 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 à merveille, mais il le fait dans la norme iso 8859-15 selon mon éditeur. Depuis le même éditeur reconnaît le fichier d'entrée (dans la variable nom de fichier) en UTF-8 je ne sais pas pourquoi c'est arrivé. En ce qui concerne ma recherche a montré les lignes commentées devrait résoudre le problème. Cependant quand j'utilise ces lignes, le fichier résultant est du charabia à caractère spécial, principalement, les mots avec un tilde que le texte est en espagnol. Je voudrais vraiment apprécier l'aide que je suis perplexe....
- L'éditeur est-ce? Qui version de python? De là, ce code semble être tout à fait valable, et doit fonctionner comme prévu ...
- Kate est l'éditeur. La sortie de python --version Python 2.7.5+
- J'ai testé votre code avec 2.6.8, 2.7.5+ et 3.3.2+ tout fonctionne bien. Pourriez-vous donner quelques exemple d'entrée?
- Depuis, le texte a été transformé en raw octets de l'invisible code de traitement probablement foiré le codage UTF8.
- J'aimerais donner un exemple de fichier cependant je ne peux pas trouver un moyen de téléchargé ici...
- J'ai commenté tous mes invisibles code cependant l'erreur reste. C'était une bonne idée...
- Ok. Je l'ai résolu. Il a surtout été de ma faute, désolé tout le monde. Voici ce qui s'est passé. Le code fourni par @MarkTolonen travaillé si je change d'iso-8859-15 au lieu de utf-8 lors de l'ouverture du fichier. Cependant, comme mon éditeur mis à jour le fichier à partir de la mémoire ayant déjà chargé l'ancien codage il m'a montré le charabia. Quand j'ai ouvert le fichier à nouveau, il me l'a montrée très bien. Merci à tous et désolé pour la peine!!!
Vous devez vous connecter pour publier un commentaire.
Processus de texte et en Unicode à l'I/O limites de votre programme à l'aide de la
codecs
module:Edit: La
io
module est maintenant recommandé au lieu de codecs et est compatible avec Python 3open
syntaxe:errors=ignore
ouerrors=replace
àopen()
... si vous ne connaissez pas l'encodage du fichier. 🙂open()
etio,open()
sont les mêmes. Utilisez simplementopen()
. Consultez l'aide ("ouvrir") et vous verrez que c'est la même chose que io.open() - même le titre le dit de l'Aide sur la fonction intégrée d'ouvrir dans le module io.io.open
travaille avec à la fois ce est portable entre les deux.f.write(text.encode('utf-8'))
compte tenu de laencoding='utf8'
paramètre dansio.open()
, droit?io.open
s'attend à des chaînes Unicode pour être écrit, pas de chaînes d'octets. Il ne l'encodage de la déclaration de l'encodage.ascii
codec, donc il fonctionnera tant que la chaîne n'est ASCII. C'est pourquoi Python 3 a changé...il empêche "il travaillera parfois", ce qui est un bug assez ennuyeux à la piste vers le bas.with open
maintenantpython-2.7
.Vous pouvez également passer par le code ci-dessous:
Vous ne pouvez pas le faire à l'aide de l'ouvrir. utiliser des codecs.
lorsque vous ouvrez un fichier en python à l'aide de la fonction intégrée vous permettra de toujours lire/écrire le fichier en ascii. Pour l'écrire en utf-8, essayez ceci: