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 :

Miniscules accentuées en majuscules non accentuées


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Par défaut Miniscules accentuées en majuscules non accentuées
    Bonjour,
    Mon soucis concerne la transformation d'une chaine de caracteres miniscules en majuscules non accentués sans avoir recours aux fonctions built-in replace() et upper() (Back to stone age ), en tenant compte du caractere Espace. Si les lettres sont non accentués c'est facile a traiter (ord et chr), mais je souhaiterais modifier les caracteres accentués. Any help? Merci d'avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2012
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2012
    Messages : 321
    Par défaut
    Bonjour,

    Une solution bourrin mais qui à fait ses preuves et qui fonctionnera sans le moindre soucis est de définir un dictionnaire abev les lettres accentuées en clefs et les valeurs par lesquelles vous souhaitez les remplacer dans les.....valeurs justement

  3. #3
    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,

    Il faut passer par les unicodes:

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3
     
    from unicodedata import normalize, combining
     
    def majuscsa(ch):
        """Convertit la chaine ch (unicode) en majuscules non accentuées
           utilise unicodedata.normalize et unicodedata.combining
        """
        # conv. de minuscule en majuscule avec les accents éventuels
        ch = ch.upper()
        # suppression des accents qui restent
        chnorm = normalize('NFKD', ch)
        return "".join([c for c in chnorm if not combining(c)])
     
    x = "éèçàùôï"
    print(majuscsa(x))
    Ce qui donne:

    C'est facile avec Python 3 puisque les chaines sont en unicode par défaut. Avec Python 2, il faut faire les corrections d'encodages nécessaires.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Par défaut tyrtamos
    Bonjour Tyrtamos, merci d'avoir repondu à ma discussion,
    Jusqu'a la j'ai réussis a trouver des solutions en utilisant upper(), replace() et normalize() ;Mais la je bute à ne pas recourir à ses fonctions (consigne de mon prof )..

  5. #5
    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
    Dans ce cas, voilà ma solution avec les instructions "basiques" de Python:

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    def majuscsa(ch):
        """Convertit la chaine ch en majuscules non accentuées 
        """
        alpha1 = u"aàÀâÂäÄåÅæbcçÇdeéÉèÈêÊëËfghiîÎïÏjklmnoôÔöÖœpqrstuùÙûÛüÜvwxyÿŸz"
        alpha2 = u"AAAAAAAAAÆBCCCDEEEEEEEEEFGHIIIIIJKLMNOOOOOŒPQRSTUUUUUUUVWXYYYZ"
        x = ""
        for c in ch:
            k = alpha1.find(c) # k = indice de "c" dans alpha1
            if k >= 0:
                # "c" est dans alpha1: on remplace par le car. correspondant de alpha2
                x += alpha2[k]
            else:
                # "c" n'est pas dans alpha1: on le laisse passer
                x += c
        return x
     
    ch = "éèçàùôï"
    print(majuscsa(ch))
    Ce qui affiche:


  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Par défaut Tyrtamos
    Super ça fonctionne bien.
    Merci

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

Discussions similaires

  1. Conversion de minuscule accentuée en majuscule sans accent
    Par polothentik dans le forum Langage
    Réponses: 9
    Dernier message: 31/10/2017, 09h35
  2. [MySQL-5.1] Convertir du texte en majuscules non accentuées
    Par CinePhil dans le forum Requêtes
    Réponses: 9
    Dernier message: 18/08/2014, 10h39
  3. Réponses: 4
    Dernier message: 22/12/2010, 16h58
  4. [W-00] Accentuer les majuscules.
    Par chouchou_82 dans le forum Word
    Réponses: 4
    Dernier message: 18/02/2009, 22h05
  5. [Sql] NLS_UPPER minuscules accentuées en majuscules
    Par joel.bouvot@accenture.com dans le forum Oracle
    Réponses: 4
    Dernier message: 21/02/2006, 15h47

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