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 :

Lecture d'un excel et remplacement des caractères spéciaux


Sujet :

Python

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut Lecture d'un excel et remplacement des caractères spéciaux
    Bonjour à tous,

    Aujourd'hui je m'intéresse à la lecture d'un fichier excel pouvant contenir des caractères spéciaux comme ü,ö,ä...
    Je souhaite faire un petit script afin que tous les caractères spéciaux soient remplacés par des normaux u,o,a....

    j'ai commencé un petit quelque chose mais je ne m'en sort pas.
    Voici le code en question :
    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
     
    import sys
    import os
    import xlrd
    #import unicodedata
     
    path1 = 'P:/GH-DE-HE/__Tools/Libraries/GIS/Vergleichsanlagen/A/STG_Ahrensbök.xls'
    path2 ='P:/GH-DE-HE/__Tools/Libraries/GIS/Vergleichsanlagen/A/STG_Ahrenvoil.xls'
     
    val = []
    accents = { 'a': ['à', 'ã', 'á', 'â'], 'e': ['é', 'è', 'ê', 'ë'],'i': ['î', 'ï'],'u': ['ù', 'ü', 'û'], 'o': ['ô', 'ö'] }
    non_accents= ['a','o','e','u','i']
     
    book = xlrd.open_workbook(path2)
    sh = book.sheet_by_index(1)
     
    for rownum in range(sh.nrows):            
        val.append(sh.row_values(rownum)) 
     
    for (char, accented_chars) in accents.iteritems():
        for accented_char in accented_chars:
            for i in val:
                for j in i :
                    re = j.replace(accented_char, char)
    Voici mon message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
    Pourriez vous m'indiquer par où chercher pour faire ce que je souhaite et pourquoi est ce que j'ai ce message d'erreur ?

    Merci d'avance !
    Ps:En pj un fichier excel exempleSTG_Ahrenvoil.zip

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut
    Bonjour,

    Si tu as ce type de message, j'en conclus que tu utilise python 2.x Auquel cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'élève brillant' # N'est pas une chaîne unicode
    u'élève brillant' # est une chaîne unicode
    Un autre conseil, utilise un éditeur qui sauvegarde systématiquement en utf-8 et ajoute ceci en début de chaque fichier python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    # -*- coding:UTF-8  -*-

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Un autre conseil, utilise un éditeur qui sauvegarde systématiquement en utf-8 et ajoute ceci en début de chaque fichier python
    Pardon j'ai pas copié ma permière ligne mais en effet on fichier est bien en utf-8.

    ]u'élève brillant' # est une chaîne unicode
    ]
    D'après mon code je souhaite faire un remplacement des caractères spéciaux dans ma liste nommé val. Je l'ai itéré comme ce ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in val:
                    print i
    Le print donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [u'Bezeichnung', '', u'LIB-Datei', u'x', u'y', u'Z', u'Aktuell', u'Hersteller', u'Generatortyp', u'Nenn- leistung', ...
    J'ai donc bien le tous en unicode, n'est ce pas ?

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Python possède déjà ce qu'il faut pour te simplifier la tâche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> import unicodedata
    >>> t = u"déjà-vu"
    >>> unicodedata.normalize('NFKD', t).encode('ascii', 'ignore')
    'deja-vu'
    >>>

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Bonjour VinsS,
    Python possède déjà ce qu'il faut pour te simplifier la tâche:
    Oui en effet j'utilise déjà cette fonction pour le changement des titres des fichiers qui contiennent des caractères spéciaux. (Grâce à un de tes conseils dans cette discussions sur le forum)

    J'ai essayé avec cette méthode, voici le code initial :
    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
    def suppr_accent_excel (path1):
        """Change les caractères spéciaux dans le excel"""
        #init 
        val = []
        #ouvre l'excel
        book = xlrd.open_workbook(path1)
        sh = book.sheet_by_index(0)
        #Enregistre les variables de l'excel
        for rownum in range(sh.nrows):            
            val.append(sh.row_values(rownum))
     
        for i in val:
            i_uni = u'%s'%(i)
            val_correted = unicodedata.normalize('NFD', i_uni).encode('ascii', 'ignore')
            print val_correted
    En fait le problème est le suivant :
    Lors de la lecture du excel avec le module xlr les caractères ö ü .... sont remplacé par des \xf6rf, \xe4 ...
    Du coup la fonction unicodedata ne fonctionne pas. Et après j'ai des messages d'erreur de type UnicodeEncodeError comme cela par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    projName=[str(i) for i in sh.col_values(67)] # projectnummer est le 65ème champ
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 9: ordinal not in range(128)
    ...
    De plus comme j'importe ensuite les valeurs dans une table postgresql utf-8 et donc tous les caractères spéciaux sont à évité.

    une idée ?

Discussions similaires

  1. [Excel][Automation] Remplacer des caractères
    Par P-H B dans le forum MATLAB
    Réponses: 2
    Dernier message: 10/01/2014, 11h41
  2. Remplacer des caractères spéciaux dans une chaine
    Par enzostar dans le forum Langage
    Réponses: 5
    Dernier message: 29/09/2012, 23h16
  3. Remplacement des caractères spéciaux html
    Par duburov dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2010, 21h19
  4. [Remplacer des caractères spéciaux en caractères normaux]
    Par metalamania dans le forum Général Python
    Réponses: 2
    Dernier message: 23/02/2007, 16h18
  5. Fonction qui remplace des caractères spéciaux
    Par ViRouF dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 07/08/2006, 10h24

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