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 :

Fichier à plat vers fichier XML


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Par défaut Fichier à plat vers fichier XML
    Bonjour à tous,

    en cours d'écriture d'un petit script permettant la conversion d'un fichier à plat en fichier XML je rencontre un point qui me bloque.

    La structure du fichier à lire peut-être de la nature suivante :
    TOTO
    TITI
    TITI
    TATA
    TITI
    TATA
    TATA
    Je n'a pas de problème pour lister mon fichier et créer mes zones XML sauf lorsque j'ai deux TITI ou TATA qui se suivent. Je dois avoir dans le XML le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <liste zone="titi">
       <element item="titi1"></element>
       <element item="titi2"></element>
    </liste>
    Or, pour ma part, j'ai une liste pour chaque élement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <liste zone="titi">
       <element item="titi1"></element>
    </liste>
    <liste>
       <element item="titi2"></element>
    </liste>
    Mon parcours de fichier est classique avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    with open('fichier_plat","r") as flux
       for line in flux:
          if line[0:4] == "TITI"
              ecriture dans le fichier XML
    Merci pour vos retours.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Bonjour

    Pourrai tu nous montrer le code pour obtenir ton résultat actuel ?
    Car il existe beaucoup de méthodes pour faire du XML et nos réponses seront plus adaptée si tu précise la solution que tu as choisis

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Par défaut
    Citation Envoyé par Nom Voir le message
    Bonjour

    Pourrai tu nous montrer le code pour obtenir ton résultat actuel ?
    Car il existe beaucoup de méthodes pour faire du XML et nos réponses seront plus adaptée si tu précise la solution que tu as choisis
    Merci pour le retour, voici le code (j'ai changé volontairement le nom de certaines variable travaillant avec des données sensible) :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
            # On ouvre le fichier XML
            fic_xml = open('test.xml', 'a+')
     
            with open(sys.argv[1], 'r') as flux_plat:
                for line in flux_plat:
                    # Info récupéré dans TOTO
                    if line[0:4] == "TOTO":
                       # On poursuit le XML
                        fic_xml.write("    <ns4:Messages idMsg=\"0\">\n"
                                      "        <ns4:DateProduct>"+str(heure)+"</ns4:DateProduct>\n"
                                      "        <ns4:Destinataire>\n"
                                      "            <ns2:Coordonnees>\n"
                                      "                <Civilite>"+line[63:66]+"</Civilite>\n"
                                      "                <NomFamille>"+nom_prenom[0]+"</NomFamille>\n"
                                      "                <Prenom>"+nom_prenom[1]+"</Prenom>\n"
                                      "             </ns2:Coordonnes>\n"
                                      "         </ns4:Destinataire>\n"
                                      )
                   # Infos récupéré dans la zone TITI
                    if line[0:4] == "TITI":
                        fic_xml.write("              <Liste type=\"TITI\">\n"
                                      "                         <Element item=\"zoneTITI\">\n"
                                      "                             <Simple>\n"
                                      "                                 <Cle>NB_CLI</Cle>\n"
                                      "                                 <Val>"+line[7:10]+"</Val>\n"
                                      "                             </Simple>\n"
                                      "                         </Element>\n"
                                      "                     </Liste>\n"
                   # Infos récupéré dans la zone TATA
                    if line[0:4] == "TATA":
                        fic_xml.write("              <Liste type=\"TATA\">\n"
                                      "                         <Element item=\"zoneTATA\">\n"
                                      "                             <Simple>\n"
                                      "                                 <Cle>NB_CLI</Cle>\n"
                                      "                                 <Val>"+line[7:10]+"</Val>\n"
                                      "                             </Simple>\n"
                                      "                         </Element>\n"
                                      "                     </Liste>\n"
                  # Mon problème est ici, si sur la ligne suivant j'ai de nouveau TATA, je ne dois pas fermer </liste> mais enchainer sur <Element item=\"zoneTATA\">\n"
     
                  fic_xml.write("</Message>)\n"
                  fic_xml.close()
    J'espère que ça pourra vous aider à m'aider

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Heureusement que je t'ai demandé ton code car je serai jamais parti sur de l'écriture direct dans un fichier

    Bref
    il te suffit d'avoir une variable dans laquelle tu stock la derniere "catégorie" (ie TITI, TATA...)
    si la catégorie actuelle est différente alors tu ouvre une nouvelle liste sinon tu poursuis la précédente

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Par défaut
    Citation Envoyé par Nom Voir le message
    Heureusement que je t'ai demandé ton code car je serai jamais parti sur de l'écriture direct dans un fichier
    => Et tu ferais comment ? je débute en Python, désolé.

    Bref
    il te suffit d'avoir une variable dans laquelle tu stock la derniere "catégorie" (ie TITI, TATA...)
    si la catégorie actuelle est différente alors tu ouvre une nouvelle liste sinon tu poursuis la précédente
    => Je vais essayer. Merci.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Personnellement, pour générer du XML, j'utilise des librairies python:
    il en existe plusieurs:
    minidom : https://docs.python.org/2/library/xml.dom.minidom.html
    ElementTree : https://docs.python.org/2/library/xm...ee.ElementTree
    xmltodict (moins standard) : https://pypi.python.org/pypi/xmltodict


    Ces librairies ont pour objectif de faciliter la lecture/écriture de fichier XML

    Néanmoins ta solution fonctionne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/06/2012, 16h00
  2. Réponses: 2
    Dernier message: 20/08/2007, 14h36
  3. [XML] fichier plat vers xml
    Par jasminrose dans le forum APIs
    Réponses: 22
    Dernier message: 16/04/2007, 17h37
  4. Conversion fichier plat vers CSV
    Par linar009 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 23/11/2006, 13h35
  5. Importation fichier plat vers Mysql
    Par xender dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/05/2006, 22h36

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