Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Laurent
Merci pour cette astuce, est-ce possible d'utiliser un tel truc avec la fonction cmp(). Par exemple :
def myCompare(self,a,b): return cmp(a,b)
Ou a et b sont des chaines avec potentielement des accents ???
Merci, encore pour l'astuce.
Eric Brunel wrote:
Laurent wrote:
Bonjour,
J'ai un problème :
Si dans un shell python, vous lancez :
'é' > 'z'
Vous obtenez true. Ce qui veut dire que si vous classez des par exemple
toto=['a','b','f','é','z'] print toto.sort()
On obtient l'équivalent de :
['a','b','f','z','é']
Ce qui n'est pas top :-)
Pouvez vous m'aider sur ce point ???
La comparaison par <, > et autres compare simplement les codes des caractères, donc ça ne peut pas marcher, vu que dans à peu près tous les encodages, toutes les lettres accentuées ont des codes supérieurs à 127, et sont donc "après" toutes les lettres non-accentuées.
Pour faire ce que tu veux, tu peux utiliser la fonction strcoll du module locale: http://docs.python.org/lib/module-locale.html#l2h-2215
En lançant python dans un environnement où la langue par défaut est le français (par exemple via la commande "LANG=fr_FR python" sous Linux; sous Windows, je ne sais pas - je suppose que c'est "magique"), tu peux faire:
toto=['a','b','f','é','z'] toto.sort(locale.strcoll) toto ['a', 'b', 'xe9', 'f', 'z']
Et le "é" (c'est à dire le 'xe9') est bien là où il faut.
Merci pour cette astuce, est-ce possible d'utiliser un tel truc avec la
fonction cmp(). Par exemple :
def myCompare(self,a,b):
return cmp(a,b)
Ou a et b sont des chaines avec potentielement des accents ???
Merci, encore pour l'astuce.
Eric Brunel wrote:
Laurent wrote:
Bonjour,
J'ai un problème :
Si dans un shell python, vous lancez :
'é' > 'z'
Vous obtenez true. Ce qui veut dire que si vous classez des par exemple
toto=['a','b','f','é','z']
print toto.sort()
On obtient l'équivalent de :
['a','b','f','z','é']
Ce qui n'est pas top :-)
Pouvez vous m'aider sur ce point ???
La comparaison par <, > et autres compare simplement les codes des
caractères, donc ça ne peut pas marcher, vu que dans à peu près tous les
encodages, toutes les lettres accentuées ont des codes supérieurs à 127,
et sont donc "après" toutes les lettres non-accentuées.
Pour faire ce que tu veux, tu peux utiliser la fonction strcoll du module
locale: http://docs.python.org/lib/module-locale.html#l2h-2215
En lançant python dans un environnement où la langue par défaut est le
français (par exemple via la commande "LANG=fr_FR python" sous Linux; sous
Windows, je ne sais pas - je suppose que c'est "magique"), tu peux faire:
Merci pour cette astuce, est-ce possible d'utiliser un tel truc avec la fonction cmp(). Par exemple :
def myCompare(self,a,b): return cmp(a,b)
Ou a et b sont des chaines avec potentielement des accents ???
Merci, encore pour l'astuce.
Eric Brunel wrote:
Laurent wrote:
Bonjour,
J'ai un problème :
Si dans un shell python, vous lancez :
'é' > 'z'
Vous obtenez true. Ce qui veut dire que si vous classez des par exemple
toto=['a','b','f','é','z'] print toto.sort()
On obtient l'équivalent de :
['a','b','f','z','é']
Ce qui n'est pas top :-)
Pouvez vous m'aider sur ce point ???
La comparaison par <, > et autres compare simplement les codes des caractères, donc ça ne peut pas marcher, vu que dans à peu près tous les encodages, toutes les lettres accentuées ont des codes supérieurs à 127, et sont donc "après" toutes les lettres non-accentuées.
Pour faire ce que tu veux, tu peux utiliser la fonction strcoll du module locale: http://docs.python.org/lib/module-locale.html#l2h-2215
En lançant python dans un environnement où la langue par défaut est le français (par exemple via la commande "LANG=fr_FR python" sous Linux; sous Windows, je ne sais pas - je suppose que c'est "magique"), tu peux faire:
toto=['a','b','f','é','z'] toto.sort(locale.strcoll) toto ['a', 'b', 'xe9', 'f', 'z']
Et le "é" (c'est à dire le 'xe9') est bien là où il faut.
Eric Brunel
Laurent wrote:
Bonjour,
J'ai un problème :
Si dans un shell python, vous lancez :
'é' > 'z'
Vous obtenez true. Ce qui veut dire que si vous classez des par exemple
toto=['a','b','f','é','z'] print toto.sort()
On obtient l'équivalent de :
['a','b','f','z','é']
Ce qui n'est pas top :-)
Pouvez vous m'aider sur ce point ???
La comparaison par <, > et autres compare simplement les codes des caractères, donc ça ne peut pas marcher, vu que dans à peu près tous les encodages, toutes les lettres accentuées ont des codes supérieurs à 127, et sont donc "après" toutes les lettres non-accentuées.
Pour faire ce que tu veux, tu peux utiliser la fonction strcoll du module locale: http://docs.python.org/lib/module-locale.html#l2h-2215
En lançant python dans un environnement où la langue par défaut est le français (par exemple via la commande "LANG=fr_FR python" sous Linux; sous Windows, je ne sais pas - je suppose que c'est "magique"), tu peux faire:
toto=['a','b','f','é','z'] toto.sort(locale.strcoll) toto ['a', 'b', 'xe9', 'f', 'z']
Et le "é" (c'est à dire le 'xe9') est bien là où il faut. -- - Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> - PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com
Laurent wrote:
Bonjour,
J'ai un problème :
Si dans un shell python, vous lancez :
'é' > 'z'
Vous obtenez true. Ce qui veut dire que si vous classez des par exemple
toto=['a','b','f','é','z']
print toto.sort()
On obtient l'équivalent de :
['a','b','f','z','é']
Ce qui n'est pas top :-)
Pouvez vous m'aider sur ce point ???
La comparaison par <, > et autres compare simplement les codes des caractères,
donc ça ne peut pas marcher, vu que dans à peu près tous les encodages, toutes
les lettres accentuées ont des codes supérieurs à 127, et sont donc "après"
toutes les lettres non-accentuées.
Pour faire ce que tu veux, tu peux utiliser la fonction strcoll du module locale:
http://docs.python.org/lib/module-locale.html#l2h-2215
En lançant python dans un environnement où la langue par défaut est le français
(par exemple via la commande "LANG=fr_FR python" sous Linux; sous Windows, je ne
sais pas - je suppose que c'est "magique"), tu peux faire:
toto=['a','b','f','é','z']
toto.sort(locale.strcoll)
toto
['a', 'b', 'xe9', 'f', 'z']
Et le "é" (c'est à dire le 'xe9') est bien là où il faut.
--
- Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> -
PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com
Vous obtenez true. Ce qui veut dire que si vous classez des par exemple
toto=['a','b','f','é','z'] print toto.sort()
On obtient l'équivalent de :
['a','b','f','z','é']
Ce qui n'est pas top :-)
Pouvez vous m'aider sur ce point ???
La comparaison par <, > et autres compare simplement les codes des caractères, donc ça ne peut pas marcher, vu que dans à peu près tous les encodages, toutes les lettres accentuées ont des codes supérieurs à 127, et sont donc "après" toutes les lettres non-accentuées.
Pour faire ce que tu veux, tu peux utiliser la fonction strcoll du module locale: http://docs.python.org/lib/module-locale.html#l2h-2215
En lançant python dans un environnement où la langue par défaut est le français (par exemple via la commande "LANG=fr_FR python" sous Linux; sous Windows, je ne sais pas - je suppose que c'est "magique"), tu peux faire:
toto=['a','b','f','é','z'] toto.sort(locale.strcoll) toto ['a', 'b', 'xe9', 'f', 'z']
Et le "é" (c'est à dire le 'xe9') est bien là où il faut. -- - Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> - PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com
Eric Brunel
Laurent wrote:
Merci pour cette astuce, est-ce possible d'utiliser un tel truc avec la fonction cmp(). Par exemple :
def myCompare(self,a,b): return cmp(a,b)
Ou a et b sont des chaines avec potentielement des accents ???
La fonction locale.strcoll est l'équivalent "localisé" de cmp; donc remplace simplement cmp(a,b) par locale.strcoll(a,b) et ça marche.
En passant, tout ça est expliqué dans la doc (vu que c'est là que je l'ai trouvé...) -- - Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> - PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com
Laurent wrote:
Merci pour cette astuce, est-ce possible d'utiliser un tel truc avec la
fonction cmp(). Par exemple :
def myCompare(self,a,b):
return cmp(a,b)
Ou a et b sont des chaines avec potentielement des accents ???
La fonction locale.strcoll est l'équivalent "localisé" de cmp; donc remplace
simplement cmp(a,b) par locale.strcoll(a,b) et ça marche.
En passant, tout ça est expliqué dans la doc (vu que c'est là que je l'ai trouvé...)
--
- Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> -
PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com
Merci pour cette astuce, est-ce possible d'utiliser un tel truc avec la fonction cmp(). Par exemple :
def myCompare(self,a,b): return cmp(a,b)
Ou a et b sont des chaines avec potentielement des accents ???
La fonction locale.strcoll est l'équivalent "localisé" de cmp; donc remplace simplement cmp(a,b) par locale.strcoll(a,b) et ça marche.
En passant, tout ça est expliqué dans la doc (vu que c'est là que je l'ai trouvé...) -- - Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> - PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com