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

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Points : 56
    Points
    56
    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 confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    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 du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Points : 56
    Points
    56
    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 confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    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 du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Points : 56
    Points
    56
    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 confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    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

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Nom Voir le message
    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
    Merci.

    Je finalise une version bêta en l'état pour m'assurer que ça fonctionne et ensuite je vais me pencher sur l'étude de ses librairies.

    Bonne soirée.

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Points : 56
    Points
    56
    Par défaut Presque !!
    Hello,

    j'ai peut-être mis résolu trop vite.

    A quel niveau tu stockerais la valeur de la ligne précédente et comment reformuler le test ? J'arrive à avoir 3 titi ou 3 tata dans une liste, mais je n'arrive pas à la fermer... Je dois-être une buse, ça ma saoule de ne pas finaliser ce truc.

    Merci.

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par lasnico37 Voir le message
    Hello,

    j'ai peut-être mis résolu trop vite.

    A quel niveau tu stockerais la valeur de la ligne précédente et comment reformuler le test ? J'arrive à avoir 3 titi ou 3 tata dans une liste, mais je n'arrive pas à la fermer... Je dois-être une buse, ça ma saoule de ne pas finaliser ce truc.

    Merci.
    Finalement en persévérant, j'ai trouvé ! Dorénavant, que j'ai TITI TITI TITI TATA TATA ou TITI TATA TITI TATA ou autre sens, j'ai le bon format en sortie dans le XML.

    Merci !

+ 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