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 :

Comment supprimer des occurrences dans un fichier


Sujet :

Python

  1. #1
    Membre r�gulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Par d�faut Comment supprimer des occurrences dans un fichier
    Bonjour,

    Je dois nettoyer un fichier pour en garder quelques informations. Mon code es le suivant:

    #Cr�ation d'une liste. Les �l�ments de la liste doivent �tre supprim�s
    chaines= ['<Root>',
    '<Article>',
    '<Guide level="1">',
    '<level="2">',
    '<level="3">',
    '<level="4">',
    '<Titre>',
    '</Titre>',
    '</Paragraphe>',
    '<Paragraphe>',
    '<Gras>',
    '</Gras>']
    # Ouverture du fichier
    fichier = open('C:/FRA/Imprimable.xml', 'r')

    # Parcours du fichier source pour supprimer les cha�nes contenues dans ma liste
    for line in fichier:
    for chaine in chaines:
    if chaine in line:
    fichier.remove(chaine)
    fichier.close()

    Mon probl�me se situe au niveau de "fichier.remove(chaine)" (je pense). Au lieu de supprimer que les �l�ments du texte contenu dans ma liste, le programme me vide l'int�gralit� du fichier.
    Qu'est que j'ai mal d�fini dans mon programme.
    L'objectif est de nettoyer un fichier xml et ne garder que le texte pour ensuite pouvoir compter le nombre de mots restant dans le fichier.
    Merci de votre compr�hension.

  2. #2
    Expert confirm�

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par d�faut
    Salut,

    Avec replace() ce sera plus simple:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    fichier = open('C:/FRA/Imprimable.xml', 'r')
    txt = fichier.read()
    for chaine in chaines:
        txt.replace(chaine, '')

  3. #3
    Membre r�gulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Par d�faut Nouveau code apr�s modificaion
    Voici mon nouveau code en prenant en compte vos suggestions:

    chaines= ['<Root>',
    '<Article>',
    '<Article_Guide level="1">',
    '<Article_Guide level="2">',
    '<Article_Guide level="3">',
    '<Article_Guide level="4">',
    '<Titre>',
    '</Titre>',
    '</Paragraphe>',
    '<Paragraphe>',
    '<Gras>',
    '</Gras>']
    fichier = open('C:/FRA/Imprimable.xml', 'r')
    txt = fichier.read()
    for chaine in chaines:
    txt.replace(chaine, '')
    fichier.close()

    Le programme ne plante pas mais ne fait rien non plus. Manque t-il encore quelque chose � votre avis.

    Merci

  4. #4
    Expert confirm�

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par d�faut
    Oui mais, c'est le texte txt qui est chang� par le fichier. Celui-ci, de toutes fa�ons est ouvert en lecture pas en �criture.

    Fais un print avant et un autre apr�s pour voir:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    txt = fichier.read()
    print txt
    for chaine in chaines:
        txt.replace(chaine, '')
    print txt

  5. #5
    Membre r�gulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Par d�faut
    J'ai chang� un peu mon code en ouvrant un fichier destination pour �criture qui doit recevoir le texte modifi�.
    Ce que je n'arrive pas � comprendre, c'est qu'au lieu de r�cup�rer dans ce nouveau fichier mon texte de d�part nettoy� de tous les �l�ments de ma liste "chaines", j'ai l'impression que toutes les lignes de fichiers de d�part sont multipli�s par autant d'�l�ments qu'il y a dans ma liste dans le fichier destination.
    Non seulement mon texte n'est pas nettoy� mais il devient beaucoup plus volumineux. Par contre �a semble fonctionner si j'ai un seul �l�ment dans la liste.
    La cr�ation de liste est elle la meilleure fa�on pour aborder ce probl�me?


    chaines= ['<Root>',
    '<Article>',
    '<Article_Guide level="1">',
    '<Article_Guide level="2">',
    '<Article_Guide level="3">',
    '<Article_Guide level="4">',
    '<Titre>',
    '</Titre>',
    '</Paragraphe>',
    '<Paragraphe>',
    '<Gras>',
    '</Gras>']
    fichier=open('C:/FRA/Imprimable.xml', 'r')
    fichierD=open('C:/FRA/Imprimable2.xml', 'w')
    txt = fichier.read()
    for chaine in chaines:
    ts=txt.replace(chaine, '')
    fichierD.write(ts)
    fichier.close()
    fichierD.close()

  6. #6
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 095
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 095
    Par d�faut
    Il y a des solutions bien plus propre pour modifier, construire ou parser un fichier XML comme par exemple lxml

  7. #7
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    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 770
    Par d�faut
    Salut,
    Avec la balise "code", c'est quand m�me mieux.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    txt = fichier.read()
    for chaine in chaines:
         ts=txt.replace(chaine, '')
    le "str" �tant immutable, txt n'est jamais modifi�.
    Le contenu de "ts" � la sortie sera txt.replace('</Gras>', '') txt �tant ce qui a �t� lu.

    Votre fichier �tant un document XML, "virer" les balises (r�cup�rer le text) pourrait �tre fait avec la biblioth�que adhoc: pas besoin de conna�tre les balises!

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

  8. #8
    Membre r�gulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Par d�faut
    L'objectif ici c'est tout simplement de virer toutes les balises et ne garder que le texte. Je veux juste pouvoir compter le nombre de mots contenu dans mes fichiers sans les balises pour des besoins statistiques. La structure xml du fichier ne m'int�resse pas.

  9. #9
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    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 770
    Par d�faut
    Salut,

    Citation Envoy� par zeng49 Voir le message
    L'objectif ici c'est tout simplement de virer toutes les balises et ne garder que le texte. Je veux juste pouvoir compter le nombre de mots contenu dans mes fichiers sans les balises pour des besoins statistiques. La structure xml du fichier ne m'int�resse pas.
    Je pense avoir compris ce que vous vouliez faire: le "quoi".
    Ma question porte sur le "comment".
    Un document XML ayant une structure hi�rarchique: on peut parcourir ses �l�ments (n�uds) et en extraire le "texte" sans en conna�tre "tags"/"balises".
    Dit autrement, pour r�cup�rer le "text", on peut coder cela ainsi:

    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
    import xml.etree.ElementTree as et
     
    def g_text(node):
     
        for e in node.iter():
            if e.text:
                text = e.text.strip()
                if text:
                    yield text
            g_text(e)
     
    with open('C:/FRA/Imprimable.xml', 'r') as f:        
         tree = et.XML(f.read())
         text = ' '.join(list(g_text(tree)))
    print (text)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. R�ponses: 5
    Dernier message: 11/08/2008, 15h25
  2. R�ponses: 1
    Dernier message: 28/01/2006, 12h36
  3. R�ponses: 3
    Dernier message: 27/06/2005, 16h24
  4. [D6] Comment remplacer des cha�nes dans un fichier ?
    Par fabien25 dans le forum Langage
    R�ponses: 4
    Dernier message: 15/06/2005, 13h37
  5. Comment changer des mots dans un fichier?
    Par ptitbonum dans le forum Linux
    R�ponses: 5
    Dernier message: 07/04/2004, 23h42

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