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 :

Alimenter fichier XML à partir d'un modèle de fichier XML et d'un fichier Excel


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Alimenter fichier XML à partir d'un modèle de fichier XML et d'un fichier Excel
    Bonjour,

    je suis débutant et je suis entrain de suivre le cours de programmation python, mais en même temps j'essaie de developper un programme qui permet
    de créer x fichiers XML à partrir :

    1- d'un model de fichier XML (pour la structure)
    2- d'un fichier Excel pour les données

    le contenu de mon fichier excel est le suivant ( à titre d'exemple)


    Id_GROUPE NOM Sexe
    1 NOM1 F
    1 NOM2 1
    1 NOM3 1
    1 NOM4 1
    2 NOM1 M
    2 NOM2 2
    3 NOM1 M
    3 NOM2 2
    3 NOM3 2

    pour cette exemple je souhaite :

    1- avoir 3 fichiers xml : Id_GROUPE_1.xml (pour le groupe de données 1) , Id_GROUPE_2.xml (pour le groupe de données 2) Id_GROUPE_3.xml (pour le groupe de données 2)


    le contenu du fichier modèl XML est le suivant


    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <SOURCE DESCRIPTION ="" NAME ="GROUPEx" OBJECTVERSION ="1" OWNERNAME ="ADMIN" VERSIONNUMBER ="1">
     
           <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="Id_GROUPE"  VALUE ="x"/>
     
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="NOM"  VALUE ="NOMx"/>
     
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="SEX" VALUE ="SEXx"/>
     
    </SOURCE>

    le résultat souhaité pour le premier fichier xml (Id_GROUPE_1.xml):

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <SOURCE DESCRIPTION ="" NAME ="GROUPE1" OBJECTVERSION ="1" OWNERNAME ="ADMIN" VERSIONNUMBER ="1">
           <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="Id_GROUPE"  VALUE ="1"/>
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="NOM"  VALUE ="NOM1"/>
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="SEX" VALUE ="F"/>
           <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="Id_GROUPE"  VALUE ="1"/>
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="NOM"  VALUE ="NOM2"/>
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="SEX" VALUE ="M"/>
    <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="Id_GROUPE"  VALUE ="1"/>
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="NOM"  VALUE ="NOM3"/>
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="SEX" VALUE ="M"/>
    <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="Id_GROUPE"  VALUE ="1"/>
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="NOM"  VALUE ="NOM4"/>
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="SEX" VALUE ="M"/>
    </SOURCE>


    le résultat souhaité pour le premier fichier xml (Id_GROUPE_2.xml):
    pour le premier groupe de données (id_groupe =1)
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <SOURCE DESCRIPTION ="" NAME ="GROUPE2" OBJECTVERSION ="1" OWNERNAME ="ADMIN" VERSIONNUMBER ="1">
           <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="Id_GROUPE"  VALUE ="2"/>
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="NOM"  VALUE ="NOM3"/>
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="SEX" VALUE ="M"/>
           <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="Id_GROUPE"  VALUE ="2"/>
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="NOM"  VALUE ="NOM4"/>
            <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="SEX" VALUE ="2"/>
    </SOURCE>


    Pour la lecture du fichier Xlxs j'utilise la bibliothèque PANDAS, le programme qui permet de lire le fichier xls et le sotckage des informations dans un dictionnaire et le suivant :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    # -*-coding:Latin-1 -*
    import pandas as pd
    import os   # On importe le module os qui dispose de variables 
                # et de fonctions utiles pour dialoguer avec votre 
                # système d'exploitation
     
    # Récupération du dossier du script
    root_dir = os.path.dirname(os.path.realpath(__file__))
     
     
    # ------- Lecture du fichier Excel avec selection des colonnes
    # En paramètre l'emplacement du fichier, l'onglet et les colonnes
    df_xls = pd.read_excel(root_dir+"\\in\\exemple.xlsx",
    sheet_name='TABLES', 
    usecols=['Id_GROUPE','NOM','Sexe'])
                   ,     
    ## -------Itère sur les lignes d'un Dataframe
    groups = {}
    for group in df_xls.itertuples():
        #d = {"Code_de_la_table": group.Code_de_la_table}
        d = {
         "Id_GROUPE": group.Id_GROUPE,
         "NOM": group.NOM,
         "Sexe": group.Sexe,
           }
        if group.Num_table not in groups:
            groups[group.Num_table] = [d]
        else:
            groups[group.Num_table].append(d)
    #print(groups)
     
    for key, value in groups.items():
     print (key,value)
    pour la manipulation des fichierx XML, je souhaite utiliser le module ElementTree, mais je ne sais pas comment procéder
    si vous avez une idée ou un exemple je vous remercie d'avance


    Cordialement

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Une chose comme:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <SOURCEFIELD BUSINESSNAME ="" DATATYPE ="varchar"  NAME ="Id_GROUPE"  VALUE ="1"/>
    est une chaine de caractères où on veut "paramétrer" la valeur qui vient après VALUE=...

    Et vous avez déjà écrit des boucles du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for x in range(10):
        print ('VALUE=', x)
    où çà affiche des lignes commençant par "VALUE=" suivie de la valeur de x.

    Un fichier XML est juste un fichier texte.

    Vous n'avez pas besoin d'ElementTree pour écrire ce genre de fichier... (mais çà sera utile pour le lire).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse
    les fichiers excel ne contient pas que 2 groupe, et chaque groupe contient 5 à n lignes par groupe de données (désole erreur dans l'exemple)
    donc le nombre balaise dans le fichier XML à créer dépond du nombre de ligne dans chaque groupe,


    donc ce que je souaite c'est de crée x fichier XML en Fonction du nombre de groupe de données dans le ficher XLS.

    Id_GROUPE NOM Sexe

    1 NOM1 F
    1 NOM2 1
    1 NOM3 F
    1 NOM4 M
    ..

    2 NOM1 M
    2 NOM 2

    3 NOM1 F
    3 NOM2 F

Discussions similaires

  1. [XL-2010] Alimenter fichier excel avec fichiers à nom variable
    Par miliev83 dans le forum Excel
    Réponses: 4
    Dernier message: 22/04/2016, 17h16
  2. Générer un fichier doc à partir d'un modèle XML
    Par Hellgast dans le forum Général Python
    Réponses: 6
    Dernier message: 19/05/2014, 14h26
  3. Alimenter fichier Excel
    Par zaza13013 dans le forum LabVIEW
    Réponses: 6
    Dernier message: 12/04/2011, 14h33
  4. Alimentation Fichier Excel et formules excel
    Par Frlet44 dans le forum Pentaho
    Réponses: 2
    Dernier message: 22/02/2010, 16h54
  5. alimenter fichier Excel déjà existant avec formules
    Par charlotte53 dans le forum kettle/PDI
    Réponses: 1
    Dernier message: 12/06/2008, 17h50

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