Je suis en train de décoder une chaîne que je pris du fichier:
file = open ("./Downloads/lamp-post.csv", 'r')
data = file.readlines()
data[0]
3 Réponses :
edit fort> puisque vous avez posté 2.7 Il s'agit de la solution 2.7: p> Ignorer les caractères non rectobles: p> file = open("./Downloads/lamp-post.csv", "r")
data = [line.decode("utf-16", "ignore") for line in file]
Dans [21]: fichier = ouvert ("./downloads/lamamp-post.csv", 'r') dans [22]: DATA = [LINE.DECODE () pour la ligne dans Fichier] --------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ --- -----------------
Ohh, voulez-vous ignorer ces caractères non valides ou les remplacer? Édité ma réponse en supposant remplacement.
Dans Python 3, des fichiers sont ouverts en mode Unicode par défaut. Donc, ils n'auront pas de méthode de décodage.
Je décide le bowvote. Mais il y a toujours une meilleure façon de python 3: utilisez l'argument de codage pour OUVERT. Ouvrir ("Téléchargements / Lampe-Post.csv", encodage = "utf-16") code>.
Les données étranges ne semblent pas être changées ... E.G. Je vois le même tableau de données d'appel UTF-16
@Oleg: Êtes-vous sûr que c'est 2,7? /pt/local/lib/python2.5 / code>?
Voir la mise à jour sur la question ... Auch c'est 2.5: Argent: ~ Oleg $ ipython Python 2.5.1 (R251: 54863, 22 février 2008, 16:52:17) Tapez "Copyright", "Crédits" ou "Licence" pour plus informations.
Ceci ressemble à des données UTF-16. Alors essayez édition (pour votre mise à jour): essayez de décoder l'ensemble du fichier à la fois, c'est-à-dire p> le problème est que Les pauses de la ligne dans UTF-16 sont "\ n \ x00", mais en utilisant Readlines () code> sera divisée à la "\ n", laissant le caractère "\ x00" pour la ligne suivante. p> p>
Étrange, il échoue pour la prochaine ligne:
Ce fichier est un fichier codé UTF-16-LE, avec un bom initial.
import codecs
fp= codecs.open("a", "r", "utf-16")
lines= fp.readlines()
-1 Balderdash. >>> Raw = '\ xff \ xfek \ x00e \ x00y \ x00w \ x00o \ x00r \ x00d \ x00' >>> Raw.Decode ('utf_16le') u '\ ufeffkeyword' >>> Raw.Decode ('utf_16 ') u'keyword' >>>
Ma réponse fonctionne sans l'erreur. Mais cela dépend si vous souhaitez ignorer ou remplacer les caractères non récupérés.