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 :

lire tout le contenu d'un fichier xml


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut lire tout le contenu d'un fichier xml
    Bonjour
    voici ce code qui marche pas : l'appel à la méthode lireFichierRetourTabretourne rien
    je voudrais afficher le contenu de mon fichier xml
    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
     
    #!/usr/bin/env python
    # -*- coding: UTF8 -*-
     
     
    # ecrire dans un fichier
    def ecrireDansFichier(path,texte):
            fichier = open("C:/Documents and Settings"+"//"+path,"w")
            fichier.writelines(texte)
            fichier.close()
     
    # lire un fichier
    def lireFichier(path):
            fichier = open("C:/Documents and Settings"+"//"+path,"r")
            ligne = fichier.readline()
            ligne = ligne.strip()
            print ligne
            #return ligne
            fichier.close()
    # lecture d'un fichier et returne une liste
    def lireFichierRetourTab(path):
            fichier = open("C:/Documents and Settings"+"//"+path,"r")
            tab = []
            for ligne in fichier.readlines():
                tab.append(ligne.split())
            return tab
     
            fichier.close()
     
     
     
     
    def ajouter(path,texte):
            fichier = open("C:/Documents and Settings"+"//"+path,"a")
            fichier.writelines(texte)
            fichier.close()
     
    ecrireDansFichier("nomFichier.xml","Hi")
     
    ajouter("nomFichier.xml","\n")
    ajouter("nomFichier.xml","Nancy")
    #lireFichier("nomFichier.xml")
    lireFichierRetourTab("nomFichier.xml")

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    en remplaçant return tab par print tab
    j'ai ce résultat [['Hi'], ['Nancy']]

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    mais le problème n'a pas encore résolu
    je voudrais afficher que les mots uniquement

  4. #4
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    D’abord, ’y a un problème dans ton code – tu retournes tab avant de fermer ton fichier, ce qui fait que celui-ci ne sera jamais clos !

    Ensuite, lireFichierRetourTab retourne bien un tableau. Si tu veux l’afficher, il faut que tu utilises print, comme par exemple dans le code ci-dessous.

    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
     #!/usr/bin/env python
    # -*- coding: UTF8 -*-
     
     
    # ecrire dans un fichier
    def ecrireDansFichier(path,texte):
            fichier = open("C:/Documents and Settings"+"//"+path,"w")
            fichier.writelines(texte)
            fichier.close()
     
    # lire un fichier
    def lireFichier(path):
            fichier = open("C:/Documents and Settings"+"//"+path,"r")
            ligne = fichier.readline()
            ligne = ligne.strip()
            print ligne
            #return ligne
            fichier.close()
    # lecture d'un fichier et returne une liste
    def lireFichierRetourTab(path):
            fichier = open("C:/Documents and Settings"+"//"+path,"r")
            tab = []
            for ligne in fichier.readlines():
                tab.append(ligne.split())
            fichier.close()
            return tab
     
     
    def ajouter(path,texte):
            fichier = open("C:/Documents and Settings"+"//"+path,"a")
            fichier.writelines(texte)
            fichier.close()
     
    ecrireDansFichier("nomFichier.xml","Hi")
     
    ajouter("nomFichier.xml","\n")
    ajouter("nomFichier.xml","Nancy")
    #lireFichier("nomFichier.xml")
    print(" ".join(lireFichierRetourTab("nomFichier.xml"))

    Note: La fonction join() des chaînes de caractères va concaténer toutes les strings que tu lui passes en argument (ici, celles de tab), en plaçant entre chaque le contenu de la chaîne à partir de laquelle tu l’appelles (ici, une simple espace, mais tu peux utiliser une virgule ", ", ou n’importe quelle autre chaîne…).

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    cette ligne renvoie une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print (" ".join(lireFichierRetourTab("nomFichier.xml"))
    SyntaxError: invalid syntax
    et si on enlève le join :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print lireFichierRetourTab("nomFichier.xml")
    y aura plus d'erreur mais le resultat reste le meme :[['Hi'], ['Nancy']]

  6. #6
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Oups*! J’ai oublié une parenthèse fermante sur la dernière ligne, c’est tout*

    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
     #!/usr/bin/env python
    # -*- coding: UTF8 -*-
     
     
    # ecrire dans un fichier
    def ecrireDansFichier(path,texte):
            fichier = open("C:/Documents and Settings"+"//"+path,"w")
            fichier.writelines(texte)
            fichier.close()
     
    # lire un fichier
    def lireFichier(path):
            fichier = open("C:/Documents and Settings"+"//"+path,"r")
            ligne = fichier.readline()
            ligne = ligne.strip()
            print ligne
            #return ligne
            fichier.close()
    # lecture d'un fichier et returne une liste
    def lireFichierRetourTab(path):
            fichier = open("C:/Documents and Settings"+"//"+path,"r")
            tab = []
            for ligne in fichier.readlines():
                tab.append(ligne.split())
            fichier.close()
            return tab
     
     
    def ajouter(path,texte):
            fichier = open("C:/Documents and Settings"+"//"+path,"a")
            fichier.writelines(texte)
            fichier.close()
     
    ecrireDansFichier("nomFichier.xml","Hi")
     
    ajouter("nomFichier.xml","\n")
    ajouter("nomFichier.xml","Nancy")
    #lireFichier("nomFichier.xml")
    print(" ".join(lireFichierRetourTab("nomFichier.xml")))

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    erreur : print(" ".join(lireFichierRetourTab("nomFichier.xml")))
    TypeError: sequence item 0: expected string, list found


  8. #8
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Au temps pour moi, j’avais pas testé, et du coup j’ai loupé un point important

    Ta fonction lireFichierRetourTab retourne une liste de listes, ce qui n’est pas souhaitable, et empêche évidemment join() de fonctionner !

    En fait, split() retourne déjà une liste, donc il ne faut pas l’ajouter à tab (append()), mais étendre ce dernier, avec extend() :

    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
     #!/usr/bin/env python
    # -*- coding: UTF8 -*-
     
     
    # ecrire dans un fichier
    def ecrireDansFichier(path,texte):
            fichier = open("C:/Documents and Settings"+"//"+path,"w")
            fichier.writelines(texte)
            fichier.close()
     
    # lire un fichier
    def lireFichier(path):
            fichier = open("C:/Documents and Settings"+"//"+path,"r")
            ligne = fichier.readline()
            ligne = ligne.strip()
            print ligne
            #return ligne
            fichier.close()
    # lecture d'un fichier et returne une liste
    def lireFichierRetourTab(path):
            fichier = open("C:/Documents and Settings"+"//"+path,"r")
            tab = []
            for ligne in fichier.readlines():
                tab.extend(ligne.split())
            fichier.close()
            return tab
     
     
    def ajouter(path,texte):
            fichier = open("C:/Documents and Settings"+"//"+path,"a")
            fichier.writelines(texte)
            fichier.close()
     
    ecrireDansFichier("nomFichier.xml","Hi")
     
    ajouter("nomFichier.xml","\n")
    ajouter("nomFichier.xml","Nancy")
    #lireFichier("nomFichier.xml")
    print(" ".join(lireFichierRetourTab("nomFichier.xml")))

    Cette fois, je crois que ça marche*

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    yes ca marche
    resultat :
    Hi Nancy

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    mais dis moi c'était quoi l'erreur ?

  11. #11
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Ben, comme écrit plus haut :
    [dans lireFichierRetourTab(), ligne 24] En fait, split() retourne déjà une liste, donc il ne faut pas l’ajouter à tab (append()), mais étendre ce dernier, avec extend()
    Ce qui fait que tab ressemble maintenant à ["Hi", "Nancy"] (utilisable par join()), et plus à [["Hi"], ["Nancy"]] !

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut

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

Discussions similaires

  1. [XML] Lire le contenu d'un fichier XML et lecture des valeurs
    Par altair8080 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/07/2010, 03h17
  2. [XML] [EXPAT] Mise en memoire d'information contenue dans un fichier XML
    Par websurfeur dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/04/2007, 14h16
  3. Lire le contenu d'un fichier xml
    Par Invité dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 10/01/2006, 19h13
  4. Comment Lire une valeur à partir d'un fichier XML en C++?
    Par Hamdi Hedhili dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 13/12/2005, 10h09
  5. Réponses: 5
    Dernier message: 16/03/2005, 22h17

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