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 :

traitement de fichier


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut traitement de fichier
    Bonjour,

    Je voudrais dans un fichier, trouver un élément d'une ligne et supprimer entièrement cette ligne.

    Quelqu'un a une solution?

    Bonne journée

  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Salut

    Le plus simple, c'est de prendre les lignes de ton fichier une à une, et de les réécrire dans un nouveau fichier. Quitte à renommer après si besoin.

    Avec Python >= 2.6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with open("fichier_en_entree") as fin:
        with open("fichier_en_sortie", "w") as fout:
            for line in fin:
                if il_faut_lecrire():
                    fout.write(line)

  3. #3
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    Est-ce qu'il n'est pas possible de l'ouvrir en "a" (append)? Car je préferais ne pas réécrire dans un nouveau fichier car mon script va devenir vite ingérable

    Egalement après avoir fait un "find" sur l'élément en question, est-il possible de supprimer la ligne entière sur lequel se trouve l'élément?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bonjour,


    Tu serais pas dans la même classe que storm85, des fois ?
    http://www.developpez.net/forums/d93...e/#post5246010



    Tu dervais trouver des réponses et des indications à partir du post suivant:
    http://www.developpez.net/forums/d93...e/#post5246139


    Et pour voir rapidement un exemple concret , descends jusqu’au post # 10 dans cette file.


    Si tu continues à avoir des difficultés, on t’aidera de façon plus précise.


    ----------------------------------------

    Mais pour répondre à tes questions:

    « trouver un élément d'une ligne »
    cela suppose qu’on lise le fichier

    « supprimer entièrement cette ligne »
    cela suppose qu’on écrive en écrasant dans le fichier, ou qu’on écrive un autre fichier en ’oubliant’ la ligne concernée

    Dans le premier cas, il faut ouvrir en ’r’
    Dans le second, il faut ouvrir en mode ’w’.

    Ou bien, pour faire les deux sans avoir à fermer et rouvrir entre le mode ’r’ et le mode ’w’, il faut ouvrir en ’r+’.



    Si tu ouvres en ’a+’, toute instruction d’écriture n’écrira qu’à la fin du fichier: le mode ’a’ ou ’a+’ est un mode de protection des données, chaque fois qu’une instruction write() est exécutée dans un tel mode, elle est précédée d’un déplacement du curseur de fichier à la fin de celui-ci.


    ---------------------------------

    Par ailleurs, pourquoi réécrire dans un nouveau fichier serait il plus ingérable que de modifier en place un fichier ?

  5. #5
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    Euh non du tout storm85 n'est pas dans ma classe mais c'est vrai que l'on a un peu le même problème. Le hasard fait bien les choses

    Je disais que ça pouvait devenir ingérable car il faudrait supprimer les anciens fichiers qui ne servent plus, non?

    Merci pour les posts

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Il y a tout ce qu’il faut pour s’occuper de fichiers et de dossiers dans les modules os et os.path

    Par exemple remove() qui permet de détruire un fichier.

  7. #7
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    J'ai regardé tes posts sur le traitement de fichier, qui sont d'ailleurs très bien fait et précis, mais je comprends toujours pas, j'ai essayé d'adapter ce que tu as expliqué à mon cas, sans résultat.

    Mon fichier:

    host client1.domain.fr { hardware ethernet 00:0A:95:F3:24:A0; fixed-address 194.254.111.227; }

    host client3.domain.fr { hardware ethernet 00:A0:F1:29:68:55; fixed-address 194.254.111.193; }
    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
     
    #La ligne à supprimer est celle où se trouve la chaine de caractère "client3"
    chaine= r"client3"
    contenu=""
     
    with open ('/home/kevin/194.254.111.192.net', "r+b") as f:
    	ch = f.read()
    	x = ch.find(chaine)
    	x = ch[0:x].rfind('\n') + 1
    	f.seek(x)
    	for ligne in f[x:]:
    		if not(chaine in ligne):
    			contenu+=ligne
    	f.seek(x)
    	f.write(contenu)
    	f.close()
    Il me renvoit comme réponse:

    Traceback (most recent call last):
    File "<pyshell#126>", line 6, in <module>
    for ligne in f[x:]:
    TypeError: 'file' object is unsubscriptable

    Pour la réponse que tu as fourni à storm85, j'ai bien cerné son problème mais pas compris ton script dsl.

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

Discussions similaires

  1. [Traitement de fichiers] substitutions
    Par david_m dans le forum Langage
    Réponses: 3
    Dernier message: 04/01/2006, 09h27
  2. traitement de fichier
    Par loic_86 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/11/2005, 17h56
  3. Réponses: 1
    Dernier message: 24/07/2005, 22h25
  4. TRaitement de fichier avec PERL
    Par Dr_GonZO dans le forum Langage
    Réponses: 4
    Dernier message: 22/07/2005, 12h38
  5. traitement de fichier XML dans une Tache planifiée
    Par marivi dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 21/06/2005, 10h40

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