Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Python]Récupérer plusieurs lignes avt puis aprs commentaire

Je vais vous expliquer tout ça

    4 mars 2011 à 11:45:26

    Bonjour à tous les Zéros ;)

    Je commence à programmer en python (depuis maintenant trois semaines), j'aimerai avoir un peu d'aide sur un problème assez simple mais pour moi complexe ... o_O

    Je vais vous expliquer tout ça :

    J'ai un fichier type :

    ligne de code
    ...(un certain nombre de ligne dont je ne connais pas le contenu)
    ligne de code
    # Commentaire1 (commentaire type dont je connais le contenu et la forme exact)
    
    ...(ce que je ne veux pas récupérer)
    
    # Commentaire2 (commentaire type dont je connais le contenu et la forme exact)
    ligne de code
    ...(un certain nombre de ligne dont je ne connais pas le contenu)
    ligne de code


    Donc comme je l'ai écrit, je veux récupérer ce qui est avant le Commentaire1 (avec Commentaire1) et ce qui est après Commentaire2 (avec Commentaire2).

    J'ai commencé un peu de code mais rien y fait :( :

    #Check comments dhcpd
    dhcpd_com_head = '# Caution the following lines have been automatically'
    dhcpd_com_foot = '# End of generated part'
    #Comments dhcpd
    matcher_com_dhcpd_head = re.compile('(.*)' + dhcpd_com_head,re.M)
    matcher_com_dhcpd_foot = re.compile(dhcpd_com_foot + '(.*)',re.M)
    with open(dhcpd_tmp,"r") as g: #utiliser r+
    	g = g.read()
    	com_head_found = matcher_com_dhcpd_head.search(g)
    	com_foot_found = matcher_com_dhcpd_foot.search(g)
    	if com_head_found:
    		print com_head_found.group(1)
    	if com_foot_found:
    		print com_foot_found.group(1)
    


    Si vous pouvez éclairer ma lanterne parce que je commence a sécher.

    De mon coté, je continu a chercher et je vous tiens au courant si j'ai du nouveau.

    Merci d'avance pour vos réponses
    • Partager sur Facebook
    • Partager sur Twitter
      4 mars 2011 à 12:41:05

      A mon avis c'est pas la peine d'utiliser de regex pour ça.
      Tu crées un booléen que tu initialises à True, tu lis ton fichier et récupères les lignes si ton booléen est vrai. Quand tu rencontres une ligne qui commence par #, tu passes ton booléen à False, puis quand tu rencontres le prochain # tu le remets à True et ça devrait passer.
      En gros quelque chose du genre :
      take_line = True
      for line in file.splitlines():
        if take_line and not line.startswith('#'):
          print(line)
        elif line.startswith('#'):
          take_line = not take_line
      

      Edit : Au cas où, ici j'ai supposé que file était le contenu de ton fichier sous forme de string.
      • Partager sur Facebook
      • Partager sur Twitter
        4 mars 2011 à 14:03:13

        C'était une bonne idée mais j'ai essayé et ça ne marche pas. Il me retourne le contenu sans les commentaires que je connais.

        C'est vraiment bizarre parce que je souhaite récupérer le debut du fichier jusqu'a Commentaire1 et de Commentaire2 à la fin du fichier. Ca à l'air facile vu comme ça mais je n'y arrive vraiment pas... :'(
        • Partager sur Facebook
        • Partager sur Twitter
          4 mars 2011 à 14:37:36

          Bah dans ce cas avec
          take_line = True
          for line in file.splitlines():
            if take_line and not line.startswith('#'):
              print(line)
            elif line.startswith('#'):
              print(line)
              take_line = not take_line
          

          ça ira très bien.
          • Partager sur Facebook
          • Partager sur Twitter
            10 mars 2011 à 9:58:46

            J'ai finalement réussi avec un search dans un matcher en précisant re.DOTALL pour qu'il prenne toutes les lignes, puis après j'ai fait des groupes si vous voulez plus de précision je vous mettrai ce que j'ai fait ;).

            Merci Kashiwa pour tes réponses :), ça m'a bien aiguiller !
            • Partager sur Facebook
            • Partager sur Twitter

            [Python]Récupérer plusieurs lignes avt puis aprs commentaire

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown