IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

problème de caractère accentué


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut problème de caractère accentué
    je cherche a supprimer les caractères accentués .
    Le fichier est une fichier excel de typ xlsx.
    Je lis le fichier sans aucune difficule par contre la supression des accents ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    # coding: utf-8  
    import xlrd
    import unicodedata
     
     
     
    def net_text(src):
    	# supresson des caracteres accentue
    	src.encode(encoding='utf_8')
    	le_text = unicodedata.normalize('NFD', src).encode('ascii', 'ignore') 
    	le_text=  src.strip()
    	le_text= le_text.replace(' ', '_') 
    	le_text= le_text.replace('°̀', '_')
    	le_text= le_text.replace('(̀', '_')
    	le_text= le_text.replace(')̀', '_')
    	le_text= le_text.replace(',̀', '_') 
    	le_text= le_text.replace('?', '')
    	le_text= le_text.replace(',̀', '_') 
    	return le_text
    	pass
     
    # Base Application
    if __name__ == '__main__':
     
     
    	s = 'Découvrez tous les logiciels à télécharger'
    	s.encode(encoding='utf_8', errors='strict') 
    	print(s)
    	s2 = unicodedata.normalize('NFD', s).encode('ascii', 'ignore')  
    	print(s2) 
     
    	# ouverture du fichier Excel
    	wb = xlrd.open_workbook('decisionnelle.xlsx')
    	# feuilles dans le classeur
    	print("lecture du nom des feuilles")
    	liste_des_feuilles =wb.sheet_names()
     
    	#print(liste_des_feuilles)
    	for la_feuille in liste_des_feuilles:
    	# supresson des caracteres accentue
    		la_classe =  net_text(la_feuille) 	    #constitution de la classe	
    		la_classe = 'class ' + la_feuille + '(object): \n'
    		#pour chaque feuille constituter la class
    		print(la_classe)
     
    		sh = wb.sheet_by_name(la_feuille)
    		for rownum in range(sh.nrows):
    			champ = sh.row_values(rownum)
     
    			la_classe_def = '\tdef __init__():\n'
     
    			la_classe_def += '\tpass\n'
    			la_classe_charger = '\tdef charger(src):\n'
    			la_classe_charger += '\tpass\n'
    			# lecture des données dans la première feuille
     
     
    		# cas de l'entete	
    		sh = wb.sheet_by_name(u'entete')
    		#for rownum in range(sh.nrows):
     
    			#print(sh.row_values(rownum))
    			# lecture par colonne
    			#colonne1 = sh.col_values(0)# premiere colonne de la feuille
    			#print(colonne1)


    ma fonction net_text(src): ne supprimer pas les accents

    voici ce quelle retourne

    Découvrez tous les logiciels à télécharger
    b'Decouvrez tous les logiciels a telecharger'
    lecture du nom des feuilles

    class Détail V1(object):

    class Détail V2(object):

    class Détail V3(object):

    les feuilles du fichier excel sont

    Détail V1
    Détail V2
    Détail V3

    non seulement le caractères accentué n'est pas supprimer mais en plus la commande "le_text= src.strip().replace(' ', '_') " ne transforme pas l'espace en _

    je veux obtenir

    class Détail_V1(object):
    class Détail_V2(object):
    class Détail_V3(object):

    mais non.

    la fonction est base sur le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	s = 'Découvrez tous les logiciels à télécharger'
    	s.encode(encoding='utf_8', errors='strict') 
    	print(s)
    	s2 = unicodedata.normalize('NFD', s).encode('ascii', 'ignore')  
    	print(s2)
    ce code fonctionne mais pas le code de la fonction net_text(src):

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà une petite fonction pour supprimer les accents d'une chaine unicode (Python 3):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # -*- coding: utf-8 -*-
    # Python 3
     
    from unicodedata import normalize, combining
     
    def supaccents(ch):
        """Supprime les accents de la chaine unicode ch
           utilise unicodedata.normalize et unicodedata.combining
        """
        chnorm = normalize('NFKD', ch)
        return "".join([c for c in chnorm if not combining(c)])
     
    x = "àÀâÂäÄåÅçÇéÉèÈêÊëËîÎïÏôÔöÖùÙûÛüÜÿŸ"
    print(supaccents(x))
    aAaAaAaAcCeEeEeEeEiIiIoOoOuUuUuUyY

  3. #3
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut Ok
    Merci pour ta solution qui fonctionne , mais le problème n'etait pas que dans le code de ma fonction mais aussi dans son utilisation




    [CODE]# coding: utf-8
    # Python 3


    # coding: utf-8
    import xlrd
    import unicodedata
    from unicodedata import normalize, combining

    def supaccents(ch):
    """Supprime les accents de la chaine unicode ch
    utilise unicodedata.normalize et unicodedata.combining
    """
    chnorm = normalize('NFKD', ch)
    retour = "".join([c for c in chnorm if not combining(c)])

    return retour

    def net_text(src):
    # supresson des caracteres accentue
    src.encode(encoding='utf_8')
    le_text = unicodedata.normalize('NFD', src).encode('ascii', 'ignore')
    le_text= src.strip()
    le_text= le_text.replace(' ', '_')
    le_text= le_text.replace('°', '_')
    le_text= le_text.replace('(&', '_')
    le_text= le_text.replace(')', '_')
    le_text= le_text.replace(',;', '_')
    le_text= le_text.replace('?', '')
    le_text= le_text.replace(',', '_')
    return le_text
    pass

    # Base Application
    if __name__ == '__main__':



    # ouverture du fichier Excel
    wb = xlrd.open_workbook('decisionnelle.xlsx')
    # feuilles dans le classeur
    print("lecture du nom des feuilles")
    liste_des_feuilles =wb.sheet_names()

    #print(liste_des_feuilles)
    for la_feuille in liste_des_feuilles:
    # supresson des caracteres accentue
    la_classe = net_text(la_feuille) #constitution de la classe
    la_classe = 'class ' + supaccents(la_classe) + '(object): \n'
    #pour chaque feuille constituter la class
    print(la_classe)

    sh = wb.sheet_by_name(la_feuille)
    for rownum in range(sh.nrows):
    champ = sh.row_values(rownum)

    la_classe_def = '\tdef __init__():\n'

    la_classe_def += '\tpass\n'
    la_classe_charger = '\tdef charger(src):\n'
    la_classe_charger += '\tpass\n'
    # lecture des données dans la première feuille


    # cas de l'entete
    sh = wb.sheet_by_name(u'entete')
    #for rownum in range(sh.nrows):

    #print(sh.row_values(rownum))
    # lecture par colonne
    #colonne1 = sh.col_values(0)# premiere colonne de la feuille
    #print(colonne1)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Problème de caractère accentué
    Par Chantelame dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/12/2010, 08h53
  2. Problème de Stockage des caractère accentué
    Par westside-99 dans le forum JPA
    Réponses: 0
    Dernier message: 22/05/2009, 16h30
  3. Problème de caractère accentué SELECT
    Par Invité dans le forum MySQL
    Réponses: 3
    Dernier message: 09/03/2009, 22h04
  4. Réponses: 0
    Dernier message: 21/07/2008, 14h09
  5. [JEditorPane] Problème avec caractère accentué
    Par scifire dans le forum Composants
    Réponses: 6
    Dernier message: 14/09/2005, 14h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo