regarde du côté de string.translate() pour ce genre de traitements...
Sinon, en Python, la convention veut qu'un identifiant en MAJUSCULES soit considéré comme une CONSTANTE.
while 1: motliste=[] motrie2='' x=0 a=fichiermots.readline() if len(a)==0: #tester si EOF break else:
Pour parcourir un fichier ligne par ligne, c'est *beaucoup* plus simple que ça:
for line in fichiermots: # do something with line
for car in a[:len(a)-1]: pourrait (devrait) s'écrire: for car in a[:-1]:...
mais attention, si le but est de supprimer un saut de ligne, il vaut mieux utiliser a.strip()
s=DICO[car] #remplacement accentuation par normal motliste.append(s) #constitution du mot
ces trois ligne pourraient s'écrire: motliste = [DICO[car] for car in a.strip()]
motliste.sort() for let in motliste: motrie2=motrie2+motliste[x].lower() x=x+1 Pourquoi utiliser un compteur (x) et un accès par index, alors que tu a
déjà le caractère sous la main ? for car in motliste: motrie2 += car.lower()
Ceci étant, ce n'est pas la bonne façon de faire en Python. Utilise join() à la place. De même, appeler lower() sur chaque caractère est une perte de temps quand tu peux le faire sur toute la chaine d'un coup: motrie2 = "".join(motliste) motrie2 = motrie2.lower()
Je ne pense pas que ça règle ton problème (que je n'ai pas réussi à reproduire ici, mais on n'a pas non plus ton fichier de mots...), mais si ça peut t'aider:
import string
FROM = 'àâäçéèëêïîôöùûü' TO = 'aaaceeeeiioouuu' TBL = string.maketrans(FROM, TO) DEL = '-' FORMAT = '"%s";"%s"n'
src = open('mots_francais.txt','r') dest = open('dicosort.txt','w')
for line in src: word = line.strip() sorted_word = "".join(sorted(word.translate(TBL, DEL).lower())) out = FORMAT % (word, sorted_word) dest.write(out)
src.close() dest.close()
NB: pas testé, mais sauf typo, ça devrait tourner...
Voici le code correspondant :
Sans le print ecrirefich à la fin, ca coince !
Je n'ai pas d'idée
Merci
Francois
ps : mis sitecustomize.py latin-1.
En entete du programme, Cp1252,latin11,cp850,utf-8 ca ne résoud rien.
Il se peut que le problème soit dans l'encodage du fichier source...
regarde du côté de string.translate() pour ce genre de traitements...
Sinon, en Python, la convention veut qu'un identifiant en MAJUSCULES
soit considéré comme une CONSTANTE.
while 1:
motliste=[]
motrie2=''
x=0
a=fichiermots.readline()
if len(a)==0: #tester si EOF
break
else:
Pour parcourir un fichier ligne par ligne, c'est *beaucoup* plus simple
que ça:
for line in fichiermots:
# do something with line
for car in a[:len(a)-1]:
pourrait (devrait) s'écrire: for car in a[:-1]:...
mais attention, si le but est de supprimer un saut de ligne, il vaut
mieux utiliser a.strip()
s=DICO[car] #remplacement accentuation par normal
motliste.append(s) #constitution du mot
ces trois ligne pourraient s'écrire:
motliste = [DICO[car] for car in a.strip()]
motliste.sort()
for let in motliste:
motrie2=motrie2+motliste[x].lower()
x=x+1
Pourquoi utiliser un compteur (x) et un accès par index, alors que tu a
déjà le caractère sous la main ?
for car in motliste:
motrie2 += car.lower()
Ceci étant, ce n'est pas la bonne façon de faire en Python. Utilise
join() à la place. De même, appeler lower() sur chaque caractère est une
perte de temps quand tu peux le faire sur toute la chaine d'un coup:
motrie2 = "".join(motliste)
motrie2 = motrie2.lower()
Je ne pense pas que ça règle ton problème (que je n'ai pas réussi à
reproduire ici, mais on n'a pas non plus ton fichier de mots...), mais
si ça peut t'aider:
import string
FROM = 'àâäçéèëêïîôöùûü'
TO = 'aaaceeeeiioouuu'
TBL = string.maketrans(FROM, TO)
DEL = '-'
FORMAT = '"%s";"%s"n'
src = open('mots_francais.txt','r')
dest = open('dicosort.txt','w')
for line in src:
word = line.strip()
sorted_word = "".join(sorted(word.translate(TBL, DEL).lower()))
out = FORMAT % (word, sorted_word)
dest.write(out)
src.close()
dest.close()
NB: pas testé, mais sauf typo, ça devrait tourner...
regarde du côté de string.translate() pour ce genre de traitements...
Sinon, en Python, la convention veut qu'un identifiant en MAJUSCULES soit considéré comme une CONSTANTE.
while 1: motliste=[] motrie2='' x=0 a=fichiermots.readline() if len(a)==0: #tester si EOF break else:
Pour parcourir un fichier ligne par ligne, c'est *beaucoup* plus simple que ça:
for line in fichiermots: # do something with line
for car in a[:len(a)-1]: pourrait (devrait) s'écrire: for car in a[:-1]:...
mais attention, si le but est de supprimer un saut de ligne, il vaut mieux utiliser a.strip()
s=DICO[car] #remplacement accentuation par normal motliste.append(s) #constitution du mot
ces trois ligne pourraient s'écrire: motliste = [DICO[car] for car in a.strip()]
motliste.sort() for let in motliste: motrie2=motrie2+motliste[x].lower() x=x+1 Pourquoi utiliser un compteur (x) et un accès par index, alors que tu a
déjà le caractère sous la main ? for car in motliste: motrie2 += car.lower()
Ceci étant, ce n'est pas la bonne façon de faire en Python. Utilise join() à la place. De même, appeler lower() sur chaque caractère est une perte de temps quand tu peux le faire sur toute la chaine d'un coup: motrie2 = "".join(motliste) motrie2 = motrie2.lower()
Je ne pense pas que ça règle ton problème (que je n'ai pas réussi à reproduire ici, mais on n'a pas non plus ton fichier de mots...), mais si ça peut t'aider:
import string
FROM = 'àâäçéèëêïîôöùûü' TO = 'aaaceeeeiioouuu' TBL = string.maketrans(FROM, TO) DEL = '-' FORMAT = '"%s";"%s"n'
src = open('mots_francais.txt','r') dest = open('dicosort.txt','w')
for line in src: word = line.strip() sorted_word = "".join(sorted(word.translate(TBL, DEL).lower())) out = FORMAT % (word, sorted_word) dest.write(out)
src.close() dest.close()
NB: pas testé, mais sauf typo, ça devrait tourner...
Almaleh
MERCI !! Francois
Je ne pense pas que ça règle ton problème (que je n'ai pas réussi à reproduire ici, mais on n'a pas non plus ton fichier de mots...), mais si ça peut t'aider:
import string
FROM = 'àâäçéèëêïîôöùûü' TO = 'aaaceeeeiioouuu' TBL = string.maketrans(FROM, TO) DEL = '-' FORMAT = '"%s";"%s"n'
src = open('mots_francais.txt','r') dest = open('dicosort.txt','w')
for line in src: word = line.strip() sorted_word = "".join(sorted(word.translate(TBL, DEL).lower())) out = FORMAT % (word, sorted_word) dest.write(out)
src.close() dest.close()
NB: pas testé, mais sauf typo, ça devrait tourner...
-- Francois A. _________
Excellent newsreader : http://mesnews.no-ip.com
MERCI !!
Francois
Je ne pense pas que ça règle ton problème (que je n'ai pas réussi à
reproduire ici, mais on n'a pas non plus ton fichier de mots...), mais si ça
peut t'aider:
import string
FROM = 'àâäçéèëêïîôöùûü'
TO = 'aaaceeeeiioouuu'
TBL = string.maketrans(FROM, TO)
DEL = '-'
FORMAT = '"%s";"%s"n'
src = open('mots_francais.txt','r')
dest = open('dicosort.txt','w')
for line in src:
word = line.strip()
sorted_word = "".join(sorted(word.translate(TBL, DEL).lower()))
out = FORMAT % (word, sorted_word)
dest.write(out)
src.close()
dest.close()
NB: pas testé, mais sauf typo, ça devrait tourner...
Je ne pense pas que ça règle ton problème (que je n'ai pas réussi à reproduire ici, mais on n'a pas non plus ton fichier de mots...), mais si ça peut t'aider:
import string
FROM = 'àâäçéèëêïîôöùûü' TO = 'aaaceeeeiioouuu' TBL = string.maketrans(FROM, TO) DEL = '-' FORMAT = '"%s";"%s"n'
src = open('mots_francais.txt','r') dest = open('dicosort.txt','w')
for line in src: word = line.strip() sorted_word = "".join(sorted(word.translate(TBL, DEL).lower())) out = FORMAT % (word, sorted_word) dest.write(out)
src.close() dest.close()
NB: pas testé, mais sauf typo, ça devrait tourner...