Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / remplacement de caractères...

remplacement de caractères...

Remonter à Forum général Python
  • remplacement de caractères...

    Envoyé par louloubyne le 26 Février 2010 à 11:01
    Bonjour, alors voilà je débute sur python et je souhaite remplacer une série de lettres par des numréos leur correspondant.

    Avec la fonction re.sub(r'.... je parviens à faire ce remplacement mais avec la meme formule que je recopie pour chaque lettre!! Trop long et fastidieux! Je vais y passer 3 jours!
    Je me demande donc si une boucle du type "while...else" pouvait réaliser cette opération.
    "Si la lettre est X remplacer par 2 sinon, ne rien faire etc" Seulement je suis un peu perdue avec ces boucles. Quelqu'un pourrait-il venir m'éclairer un ti peu?

    Bonne journée.
    • Re: remplacement de caractères...

      Envoyé par louloubyne le 26 Février 2010 à 14:00
      En fait, les correspondances ne sont pas vraiment arbitraires, c'est basé sur les traits phonologiques des consonnes, par exemple b et p: 1, c, k, g: 2, d et t: 3...
      Ceci est fait pour étudier la prononciation des mots.

    • Re: remplacement de caractères...

      Envoyé par louloubyne le 26 Février 2010 à 14:01
      En fait, les correspondances ne sont pas vraiment arbitraires, c'est basé sur les traits phonologiques des consonnes, par exemple b et p: 1, c, k, g: 2, d et t: 3...
      Ceci est fait pour étudier la prononciation des mots.

    • Re: remplacement de caractères...

      Envoyé par louloubyne le 26 Février 2010 à 14:01
      En fait, les correspondances ne sont pas vraiment arbitraires, c'est basé sur les traits phonologiques des consonnes, par exemple b et p: 1, c, k, g: 2, d et t: 3...
      Ceci est fait pour étudier la prononciation des mots.

    • Re: remplacement de caractères...

      Envoyé par e-vidence le 27 Février 2010 à 17:48
      Maketrans est la meilleure solution si il y a un chiffre pour une lettre.

      Dans le cas où il peut y avoir un nombre pour lettre, le plus simple est d'utiliser un dictionnaire de correspondances. Il faut alors au moins créer ce dictionnaire une fois :

      (je rajoute "z" = 19 pour l'exemple, je ne sais pas combien ça vaut)

      >>> phonologie_par_lettre = {"c" : 1, "k": 1, "g": 2, "d": 3, "t": 3, "z": 19}
      >>> chaine_a_traduire = u"Ce zozo gaté"
      >>> traduction_phonetique = [ ]
      >>> for lettre in chaine_a_traduire: # on traduit lettre à lettre
      ... traduction_phonetique.append(phonologie_par_lettre.get(lettre, 0))
      ...


      On a obtenu ainsi la liste des équivalences, avec 0 pour valeur quand il n'y avait pas d'équivalent dans le dictionnaire de traduction.

      >>> print(traduction_phonetique ) # la liste des équivalences
      [0, 0, 0, 19, 0, 19, 0, 0, 2, 0, 3, 0, 0]


      Il est ensuite trivial d'obtenir la version sous forme de chaîne de caractères :

      >>> print("".join((str(x) for x in traduction_phonetique))) 
      000190190020300


      A noter qu'on peut récupérer la liste des lettres sans caractères spéciaux ainsi :

      >>> import string
      >>> print string.letters
      abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ


      Et on peut normaliser une chaîne avec des caractères spéciaux ainsi :


      >>> import unicodedata
      >>> chaine = u"éèêàùçÇ"
      >>> print(unicodedata.normalize('NFKD',chaine).encode('ascii','ignore'))
      eeeaucC
    • Re: remplacement de caractères...

      Envoyé par bibile le 26 Février 2010 à 11:26
      2 propositions, mais je ne suis pas certain d'avoir compris ton besoin.
      est-ce que les correspondances charcatere/nombre sont arbitraires ?

      lien={'x':'2', 'y':'3'}
      s='dfgxdfyfg'

      print "".join(lien.get(c, c) for c in s)

      ou
      for i in lien:
      s=s.replace(i, str(lien[i]))

      print s
Rendu par Ploneboard