Accents - Bogue étrange en Python - Python - Programmation
Marsh Posté le 04-02-2009 à 12:12:48
Au pif je dirais que tu ouvre tes fichiers .txt avec notepad.
Celui-ci essaye de deviner l'encodage des fichiers textes pour afficher les caractères correctement quelque soit l'encodage.
Pour deviner il fait des statistiques, or les statistiques sur des chaines aussi petites ça dévie facilement, du coup il se plante et parfois affiche pas avec le bon encodage.
C'est pas sûr, mais je doute que python ait un bug sur les accents "que de temps en temps" et sans que ce soit un cas spécial genre "accent sur le 1er caractère du fichier", essaye d'ouvrir tes fichiers textes avec un autre éditeur un peu plus évolué, et si c'est bien ça, regarde dans la doc de python comment on choisit l'encodage des chaines qu'on écrit dans un fichier.
Marsh Posté le 04-02-2009 à 13:21:23
Wow merci!
C'est exactement ça. Si je l'ouvre avec autre chose que NotePad, ça fonctionne, il n'y a plus les □□□. J'aurais vraiment du essayer de les ouvrir avec autre chose, mais je me suis trop concentré sur le l'étrangeté des conditions d'apparition du bogue.
Merci encore
Marsh Posté le 04-02-2009 à 14:28:25
0x90 a écrit : regarde dans la doc de python comment on choisit l'encodage des chaines qu'on écrit dans un fichier. |
En 2.x avec codecs.open(file, mode, encoding) qui prend et sort de l'unicode, sinon en appelant manuellement "decode" sur un string et "encode" sur un unicode (codecs.open est un wrapper sur open qui fait simplement l'encoding et le decoding automatiquement)
Marsh Posté le 03-02-2009 à 19:20:58
Mon programme est simple, le voici:
**********************************************
def write_file(nomDuFichier,contenu):
fichier = open(nomDuFichier,"w" )
fichier.write(contenu)
fichier.close()
def load_mots(nomDuFichier):
fichier = open(nomDuFichier,"r" )
lignes=fichier.readlines()
fichier.close()
return lignes
def spliter(mots,output):
for i in range(0,len(mots),1):
mot=mots[i].split("\n" )[0]
write_file(output+"/"+mot+".txt",mot)
mots = load_mots("mots.txt" )
spliter(mots,"mots" ) # "mots" c'est le nom du dossier où les fichiers sont créer
***********************************************
Donc en gros, ça ouvre un fichier mots.txt contenant un mot (ou expression) par ligne
et ça crée un fichier par mot (nommée "le mot en question".txt et qui contient "le mot en question" )
Par exemple si j'ai dans mots.txt:
***********
laitue
fromage
des biscuits
patate
***********
Je vais obtenir 4 fichiers, soient:
laitue.txt (contenant laitue)
fromage.txt (contenant fromage)
des biscuits.txt (contenant des biscuits)
patate.txt (contenant patate)
Le programme fonctionne parfaitement SAUF dans certains cas très douteux comme si j'ai dans mots.txt:
************
laitue
à gauche
du poulet
à droite
étrange
************
j'obtient:
laitue.txt (contenant laitue)
à gauche.txt (contenant □□□□) <------------------------------POURQUOI???
du poulet.txt (contenant des du poulet)
à droite.txt (contenant à droite)
étrange.text (contenant étrange)
Je ne comprends pas, ce n'est pas un problème d'accent, les autres fonctionnent
Je ne comprend vraiment pas, même "à droite" fonctionnent
même le nom du fichier est correct
J'ai fait d'autre test et voici d'autre qui me donne des résultats semblables:
aaéaaa.txt contient □□□
aaéaaaa.txt contient aaéaaaa
aaéaaaaa.txt contient □□□□
aaéaaaaaa.txt contient aaéaaaaaa
aaéaaaaaaa.txt contient □□□□□
aaéaaaaaaaa.txt contient aaéaaaaaaaa
aaéaaaaaaaaatxt contient □□□□□□
(il me semble y avoir une régularité avec ceux qui sont pairs... mais c'est étrange)
Avez-vous une idée d'où provient ce bug
Merci