Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

conversion de chaines de caractères accentuées

19 réponses
Avatar
Dan
Bonjour,

Je voulais savoir s'il existait une fonction permettant de transformer
des textes accentu=E9s en un texte non accentu=E9 (=E9 -> E, etc)

10 réponses

1 2
Avatar
Michel Claveau
Bonjour !

Oui, c'est possible. Mais, ce n'est pas forcément très simple.
Notamment dans le cas de chaînes unicode (encore que, en passant par
lka décomposition, c'est possible).

--
@-salutations

Michel Claveau
Avatar
Laurent Pointal
Bonjour,

Je voulais savoir s'il existait une fonction permettant de transformer
des textes accentués en un texte non accentué (é -> E, etc)



C'est sur le wiki Python-fr

http://wikipython.flibuste.net/moin.py/JouerAvecUnicode#head-1213938516c633958921591439c33d202244e2f4

En version longue et en version courte via unicodedata.

A+

Laurent.

Avatar
Laurent Pointal
Bonjour,

Je voulais savoir s'il existait une fonction permettant de transformer
des textes accentués en un texte non accentué (é -> E, etc)



C'est sur le wiki Python-fr

http://wikipython.flibuste.net/moin.py/JouerAvecUnicode#head-1213938516c633958921591439c33d202244e2f4

En version longue et en version courte via unicodedata.


Et bien sûr, si tu le veux en majuscules, s.upper().


Avatar
ReM
Bonjour,

tu peux faire un truc du style :
import string

def convert( mot ):
table = string.maketrans('àâäéèêëîïôöùüû','aaaeeeeiioouuu')
return mot.lower().translate(table).upper()

convert( "é" )



Bonjour,

Je voulais savoir s'il existait une fonction permettant de transformer
des textes accentués en un texte non accentué (é -> E, etc)



Avatar
Dan
Ok, merci à tous pour vos idées intéressantes.

Vous l'aurez compris, je ne suis pas un grand habitué à ce langage.

Vous aurez encore droit à quelques questions de néophyte :)


Daniel.
Avatar
Dan
On 22 nov, 11:54, ReM wrote:
Bonjour,

tu peux faire un truc du style :
import string

def convert( mot ):
table = string.maketrans('àâäéèêëîïôöùü û','aaaeeeeiioouuu')
return mot.lower().translate(table).upper()

convert( "é" )



J'ai un soucis :
un simple
table = string.maketrans('à','a')
me renvoie un
ValueError: maketrans arguments must have same length
alors que
table = string.maketrans('c','a')
fonctionne.

Je précise que je travaille sous Linux (Ubuntu), en natif en UTF-8.
J'ai mis en début de fichier :
# -*- coding: utf-8 -*-

... Que faire ?

Avatar
hg
Dan wrote:

On 22 nov, 11:54, ReM wrote:
Bonjour,

tu peux faire un truc du style :
import string

def convert( mot ):
table = string.maketrans('àâäéèêëîïôöùüû','aaaeeeeiioouuu')
return mot.lower().translate(table).upper()

convert( "é" )



J'ai un soucis :
un simple
table = string.maketrans('à','a')
me renvoie un
ValueError: maketrans arguments must have same length
alors que
table = string.maketrans('c','a')
fonctionne.

Je précise que je travaille sous Linux (Ubuntu), en natif en UTF-8.
J'ai mis en début de fichier :
# -*- coding: utf-8 -*-

... Que faire ?



Pas superbe, mais ça à l'air de marcher ...

hg



# -*- coding: utf-8 -*-
import string

def convert(mot):
table = string.maketrans('àâäéèêëîïôöùüû',' a a a e e e e i i o o u
u u')

return mot.translate(table).replace(' ','')


c = 'àbôö'
print convert(c)


Avatar
hg
hg wrote:
Dan wrote:
On 22 nov, 11:54, ReM wrote:
Bonjour,

tu peux faire un truc du style :
import string

def convert( mot ):
table = string.maketrans('àâäéèêëîïôöùüû','aaaeeeeiioouuu')
return mot.lower().translate(table).upper()

convert( "é" )

J'ai un soucis :

un simple
table = string.maketrans('à','a')
me renvoie un
ValueError: maketrans arguments must have same length
alors que
table = string.maketrans('c','a')
fonctionne.

Je précise que je travaille sous Linux (Ubuntu), en natif en UTF-8.
J'ai mis en début de fichier :
# -*- coding: utf-8 -*-

... Que faire ?



Pas superbe, mais ça à l'air de marcher ...

hg



# -*- coding: utf-8 -*-
import string

def convert(mot):
table = string.maketrans('àâäéèêëîïôöùüû',' a a a e e e e i i o o u
u u')

return mot.translate(table).replace(' ','')


c = 'àbôö'
print convert(c)



ou pour supporter les espaces:

# -*- coding: utf-8 -*-
import string

def convert(mot):
print len(mot)
print mot[0]
print '%x' % ord(mot[1])
table string.maketrans('àâäéèêëîïôöùüû','x00ax00ax00ax00ex00ex00ex00ex00ix00ix00ox00ox00ux00ux00u')

return mot.translate(table).replace('x00','')


c = 'àbôö a '
print convert(c)



Avatar
Dan
Merci HG, cela fonctionne.

Peux-tu m'expliquer quel était le problème avec la solution
précédente ?
Avatar
hg
Dan wrote:
Merci HG, cela fonctionne.

Peux-tu m'expliquer quel était le problème avec la solution
précédente ?




si tu fais un len('à'), ça répondra 2; donc len('a') <> len ('à')


J'aurais cru que comme 'à' fait partie de l'ASCII étendu, la longueur
devrait être sur 1 octet ... mais ce n'est clairement pas le cas.

Je suppose que le "coding" est peut-être à l'origine de ce problème.

hg

1 2