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 :

erreur arguments maketrans


Sujet :

Python

  1. #1
    Membre du Club Avatar de chaying
    Inscrit en
    Mars 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 84
    Points : 57
    Points
    57
    Par défaut erreur arguments maketrans
    Bonjour

    Est ce que quelqu'un pourrait, s'il lui plait, m'expliquer pourquoi j'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    trantab = maketrans(intab, outtab) 
    ValueError: maketrans arguments must have same length
    avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def clean(string): 
             intab   = 'àâäéèêëçùôö'     
             outtab  = 'aaaeeeecuoo'    
             trantab = maketrans(intab, outtab)     
     
             return string.strip().replace(' ', '_').translate(trantab)
     
    clean('àçdc dd')
    Merci

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Ça doit être de l'utf-8 avec Python 2.7. Les caractères accentués demandent alors 2 octets. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # -*- coding: utf-8 -*-
     
    x = "é" # x est encodé en "utf-8"
    print len(x)
    2
     
    x = u"é" # x est encodé en unicode interne
    print len(x)
    1
     
    x = u"é".encode("latin1") # x est encodé en "latin1"
    print len(x)
    1
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre du Club Avatar de chaying
    Inscrit en
    Mars 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 84
    Points : 57
    Points
    57
    Par défaut
    Salut Tyrtamos,

    Ok j'ai change la ligne 2 en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    intab   = u'àâäéèêëçùôö '.encode('latin1')
    ET ca marche !

    Merci

    PS : mmm unicode

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    D'une manière générale, si tu es bien en Python 2.7, il vaut mieux travailler en unicode interne. On utilise les changements d'encodages le plus tôt possible en entrée, et le plus tard possible en sortie.

    Ainsi, si ton objectif est de supprimer les accents, il y a une solution plus générale en unicode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 2.7
     
    import unicodedata
     
    def sans_accent(ch):
        """prend la chaine ch (encodée en unicode) et retire tous ses accents"""
        chnorm = unicodedata.normalize('NFKD', ch)
        return u"".join([c for c in chnorm if not unicodedata.combining(c)])
    Utilisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x = u"€aAàÀâÂäÄåÅæÆbBcCçÇdDeEéÉèÈêÊëËfFgGhHiIîÎïÏjJkKlLmMnNoOôÔöÖœŒpPqQrRsStTuUùÙûÛüÜvVwWxXyYÿŸzZ"
     
    print sans_accent(x)
    €aAaAaAaAaAæÆbBcCcCdDeEeEeEeEeEfFgGhHiIiIiIjJkKlLmMnNoOoOoOœŒpPqQrRsStTuUuUuUuUvVwWxXyYyYzZ
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre du Club Avatar de chaying
    Inscrit en
    Mars 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 84
    Points : 57
    Points
    57
    Par défaut
    Ainsi, si ton objectif est de supprimer les accents, il y a une solution plus générale en unicode
    Alors autant le code est simple, autant le concept qu'il y a derriere me parait abscons.
    De plus, je dois aussi subsituer des espaces, des points et des tirets, je m'en tiendrais donc a la premiere version.

    J'ai neanmoins vu quelques methodes interessantes dans la doc (name, digit, decimal..) donc merci.
    Meme si j'en ai encore les yeux qui piquent..

Discussions similaires

  1. methode fill,erreur ! arguments trop nombreux
    Par getule dans le forum Accès aux données
    Réponses: 2
    Dernier message: 13/10/2006, 21h40
  2. [A2-VBA][Débutante] Erreur "Argument non valide"
    Par Ericka dans le forum Access
    Réponses: 2
    Dernier message: 08/09/2006, 16h35
  3. Réponses: 8
    Dernier message: 08/09/2006, 14h09
  4. [1.1] Erreur argument non spécifié
    Par neuropathie dans le forum ASP.NET
    Réponses: 3
    Dernier message: 14/07/2006, 18h52
  5. Erreur : 'argument non valide'
    Par celticval dans le forum Access
    Réponses: 9
    Dernier message: 07/07/2006, 11h59

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