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 :

[IO]Recherche et suppression de lignes


Sujet :

Python

  1. #1
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut [IO]Recherche et suppression de lignes
    Bonjour !

    Je cherche a faire un script qui recherche une ligne spécifique dans un fichier et supprime cette ligne ainsi que les 7 suivante.
    J'ai pensé au python pasque c'est un langage que j'affectionne particulierement et que je savais que je pourrai avoir de l'aide ici ... car ... je n'ai pas la moindre idée du "comment faire"...

    merci de votre aide

    PS:en fait il s'agit de retirer des entrées de partage dans le fichier /etc/samba/smb.conf

  2. #2
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Voila un script python vite fait qui resoudre ton probleme.
    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
    preline = "Python"
    count = 7
    tmp = count - 2
    delete = False
    fIn = 'conf.xml'
    fOut = 'res.xml'
     
    f = file(fOut,'w')
     
    for line in file(fIn).readlines():  
        if delete:
            if not tmp:
                delete = False
                tmp = count - 2
            else:
                tmp -= 1
        else:
            if line.find(preline) != -1:
                delete = True
            else :
                f.write(line)
     
     
    f.flush()
    f.close()
    Je suis sur qu'on peut faire mieux mais l'idee c'est que cela fonctionne

  3. #3
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    hummm pas mal !!

    y a une ligne que je comprend pas (moi je suis plus java que python pour l'instant)

    cest quoi le :

    et d'ailleur la variable tmp je comprend pas trop le -2 ? ^^

    mci

  4. #4
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    merde post en double dsl

  5. #5
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Citation Envoyé par anthyme
    hummm pas mal !!

    y a une ligne que je comprend pas (moi je suis plus java que python pour l'instant)

    cest quoi le :

    et d'ailleur la variable tmp je comprend pas trop le -2 ? ^^

    mci
    Je vais t'expliquer
    En fait le tmp est un compteur qui donne la valeur combien de ligne je dois supprimer. Le test :
    est equivalent au test suivant(Java)
    Donc le test va me retourner vrai des que je n'ai plus de lignes a supprimer -> delete = False

    Le -2 C'est parce que une premiere fois je supprime la ligne courant qui correspond au motif recherche sans dire que je supprimer une ligne(tmp -= 1) donc -1. Encore -1 parce que je compte le 0. Si tu veux voila le meme script mais cette fois ci il n'y a pas de -2
    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
    preline = "Python"
    count = 7
    tmp = count
    delete = False
    fIn = 'conf.xml'
    fOut = 'res.xml'
     
    f = file(fOut,'w')
     
    for line in file(fIn).readlines():  
        if delete:
            if tmp == 1:
                delete = False
                tmp = count
            else:
                tmp -= 1
        else:
            if line.find(preline) != -1:
                delete = True
                tmp -= 1
            else :
                f.write(line)
     
     
    f.flush()
    f.close()

  6. #6
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Ah oki c'est beaucoup plus clair d'un coup :-)

    J'ai modifié la source pour faire en plus une copie du fichier tmp vers l'ancien mais j'ai une erreur ...

    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
    #! /usr/bin/python
    import sys
     
    searchDir = "["+sys.argv.pop()+"]"
    count = 7
    tmp = count - 2
    delete = False
    fPathSmb = '/etc/samba/smb.conf.test'
    fPathTmp = '/tmp/smbldaptmp/smb.conf.tmp'
     
    fTmp = file(fPathTmp,'w')
     
     
    for line in file(fPathSmb).readlines():  
        if delete:
            if tmp == 1:
                delete = False
                tmp = count
            else:
                tmp -= 1
        else:
            if line.find(searchDir) != -1:
                delete = True
                tmp -= 1
            else :
                fTmp.write(line)
     
    fTmp.flush()
    fTmp.close()
     
    fTmpr = file(fPathTmp,'r')
    fSmbw = file(fPathSmb,'w')
    fSmbw.write(fTmpr.read())
    fSmpw.flush()
    fSmpw.close()
    me sort ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PDC ~ # smbldapphp-sharedel.py comptabilite
    Traceback (most recent call last):
      File "/usr/sbin/smbldapphp-sharedel.py", line 34, in ?
        fSmpw.flush()
    NameError: name 'fSmpw' is not defined
    J'ai fait quelque chose de mal ?? :-/

  7. #7
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Il y a deux choses qui pose des problemes
    La premiere c'est que tu as une faute de frappe. Regarde l'exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NameError: name 'fSmpw' is not defined
    fSmpw n'est pas defini.
    Tu dois le remplacer par
    fSmbw
    La deuxieme c'est que tu dois enlever le -2 et donc
    devient
    sinon tu vas supprimer 5 ligne si je me trompe pas.
    J'espere que maintenant ca va marcher
    A+

  8. #8
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    olalalalal boulet boulet boulet ... escuse moi je bosse sur un projet presque 24/7 depuis 10 jour et la je fatigue ^^

    merci beaucoup a toi !

  9. #9
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Resolu ?

  10. #10
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    oué


    mais y a plus le bouton je le fais a la main

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

Discussions similaires

  1. Recherche et suppression plusieurs lignes
    Par ponpon17430 dans le forum VBScript
    Réponses: 1
    Dernier message: 14/08/2012, 10h38
  2. [XL-2003] Recherche et suppression ligne avec condition
    Par jeromeph75 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/05/2011, 10h31
  3. [XL-2007] Fonction Recherche et suppression de lignes
    Par gabi75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/06/2010, 15h32
  4. [VB.NET] Suppression de ligne dans un DataTable
    Par seemax dans le forum Windows Forms
    Réponses: 7
    Dernier message: 06/05/2004, 14h19

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