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 :

filtrer un excel pour en crée un autre


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut filtrer un excel pour en crée un autre
    bonjour,

    j'ai deux excel :
    le premier me sert de template avec deux colonnes : 1ére colonne mes noms de fichier, et la deuxième mes nom de champs ex :champs1,champs2...
    le deuxieme contient la donnéee

    à l'aide du premier fichier excel , je veux filtrer le deuxième et n'exporter que les champs qui m'intéresse et créer un fichier..

    je pensais créer un dictionnaire avec le template de sorte à avoir le nom de mon fichier a créé en cle et les champs en valeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from xlwt import Workbook, Formula
    wb = xlrd.open_workbook(path)
     
    counter=0
    dict_candidat={}
    sh = wb.sheet_by_name(u'Feuil1')
    for rownum in range(sh.nrows):
        dict_candidat.setdefault(sh.row_values(rownum)[0], []).append((sh.row_values(rownum)[1]))
    et faire la même chose pour les colonnes du fichier de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dict_writer={}
    for row in sh.row(0):
        counter+=1
        dict_writer.setdefault(row, []).append((counter))
    le problème est que le nom des colonnes revient avec le typage 'text:u'...ect'....
    j'ai l'impression deme compliquer la vie... alors je poste pour avoir quelque conseils avisé pour ce genre de travaux..

    merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    edit

    j'ai modifié mon dernier dictionnaire pour éviter d'avoir 'text:u'...ect'.... sur la chaine.. en ne lisant que la première ligne et en ajoutant un index

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    a=[]
    for row_index in xrange(sh.nrows):
    	a=sh.row_values(row_index)
    	break
    counter=0
    for row in a:
        counter+=1
        liste_writer.setdefault(row.strip(), []).append((counter))
    maintenant j'essaie faire correspondre mes deux dico :
    dict_candidat={u'ENTITE_A': [u'ENTITE_A,ENT_COURT,CODE']}
    dict_writer={u'ENTITE_A': [98],u'ENT_COURT': [99],u'CODE_': [29]}

    afin d'obtenir {u'ENTITE_A': [98],[99],[29]}


    j'ai essayé dicokeys = dict(dict_candidat.items() + dict_writer.items())
    mais cela me donne plutôt ce dico {u'ENTITE_A': [98], u'ENT_COURT': [99], u'CODE': [29]} ??

    si quelqu un peu me conseiller??

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dict_candidat={u'ENTITE_A': [u'ENTITE_A,ENT_COURT,CODE']}
    dict_writer={u'ENTITE_A': [98],u'ENT_COURT': [99],u'CODE': [29]}
     
    res_dict = {}
    for key, val in dict_candidat.items() :
        res_dict[key] = [ dict_writer[v] for v in val[0].split(',') ]
     
    print(res_dict)
    Vous avez des liste de partout, même quand il n'y a qu'un seul élément. Pas sûr que ce soit judicieux .... (d'où le val[0])
    Ceci se retrouve également dans le résultat. {'ENTITE_A': [98, 99, 29]} serait peut être aussi plus judicieux.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    bonjour,

    merci pour l'aide...

    {'ENTITE_A': [98, 99, 29]} >>>oui, je vois... je vais essayer de trouver un moyen de le faire...

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/11/2012, 17h51
  2. [XL-2003] Comment utiliser une variable pour filtrer dans Excel
    Par MichaSarah dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/06/2010, 16h40
  3. Réponses: 1
    Dernier message: 27/07/2009, 19h16
  4. Réponses: 3
    Dernier message: 09/07/2009, 15h19
  5. Réponses: 3
    Dernier message: 02/05/2007, 16h27

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