Partage
  • Partager sur Facebook
  • Partager sur Twitter

Regular Expression

Sujet résolu
    24 février 2012 à 21:04:15

    :) slt
    comment faire pour imprimer les 4 lignes qui suis celle ou ce trouve ton résulta
    par ex ci je cherche "Coach" dans le fichier 1.txt qui contienne :
    Football Coach
    We are not what we should be
    We are not what we need to be
    But at least we are not what we used to be
    
    qsfqsfsqfq
    qsfsqfsqfqs
    qsfqsfqsfqsfq

    et imprimer sur l’écran les 3 ligne qui suis cette la ligne ou ce trouve Coach

    pour trouvé le résulta en fait:
    f = open("1.txt", 'rU')
    for line in f:
      match = re.search(r"Coach", line)
      if match:
        print line
    f.close()
    
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      24 février 2012 à 21:27:28

      Le plus simple sur des petits fichiers est de récupérer dans une liste toutes les lignes et de travailler sur cette liste.

      def getline(fic, word):
          with open(fic, 'r') as f:
              lines = [line.strip() for line in f.readlines()]
              for index, line in enumerate(lines):
                  if word in line:
                      index += 1
                      return lines[index:index+3]
              
      for line in getline('test.txt', 'Coach'):
          print line
      
      # We are not what we should be
      # We are not what we need to be
      # But at least we are not what we used to be
      


      Edit :

      Citation : S@MY-H4CK3R

      f = open("1.txt", 'rU')
      for line in f:
        match = re.search(r"Coach", line)
        if match:
          print line
      f.close()
      


      Ton code ne retournera pas les 3 prochaines lignes comme tu le demandes
      • Partager sur Facebook
      • Partager sur Twitter
        24 février 2012 à 22:03:47

        Citation : fred1599

        Le plus simple sur des petits fichiers est de récupérer dans une liste toutes les lignes et de travailler sur cette liste.

        def getline(fic, word):
            with open(fic, 'r') as f:
                lines = [line.strip() for line in f.readlines()]
                for index, line in enumerate(lines):
                    if word in line:
                        index += 1
                        return lines[index:index+3]
                
        for line in getline('test.txt', 'Coach'):
            print line
        
        # We are not what we should be
        # We are not what we need to be
        # But at least we are not what we used to be
        



        Edit :

        Citation : S@MY-H4CK3R

        f = open("1.txt", 'rU')
        for line in f:
          match = re.search(r"Coach", line)
          if match:
            print line
        f.close()
        



        Ton code ne retournera pas les 3 prochaines lignes comme tu le demandes



        merci bcp pour d'avoir mentionné le fait de récupérer dans une liste toutes les lignes et de travailler sur cette liste.

        j'ai finie avec ce code
        f = open(filename, 'rU')
              i = 0
              content = []
              for line in f.readlines():
                 content.append(line)
              for l in content:
                 match = re.search(r"Coach", l)
                 if match:
                    resulta = content[i:3]
                    for x in xrange(0,3):
                       print "    ➤" + resulta[x].strip()
                 i+=1
              
              f.close()
        
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          24 février 2012 à 22:10:46

          T'as testé le code que tu as mis?

          <citation>f = open(filename, 'rU')
                i = 0
                content = []
                for line in f.readlines():
                   content.append(line)
                for l in content:
                   match = re.search(r"Coach", l)
                   if match:
                      resulta = content[i:3]
                      for x in xrange(0,3):
                         print "    ➤" + resulta[x].strip()
                   i+=1
                
                f.close()
          </citation>
          


          Malgré toutes les erreurs PEP8, indentation, etc..., ça retourne que les 2 lignes suivantes et non les 3.

          • Partager sur Facebook
          • Partager sur Twitter
            24 février 2012 à 22:11:51

            Autre possibilité plus courte:

            with open("1.txt", 'rU') as f:
            	contenu = f.readlines()
            	for i,line in enumerate(contenu):
            		if re.search(r"Coach", line):
            			print ''.join(contenu[i+1:min(i+4,len(contenu))])
            
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              24 février 2012 à 22:17:34

              Citation

              Autre possibilité plus courte:



              possibilité oui, mais je trouve que les regex sont inutiles ici. J'ai l'impression d'un écrasement de mouche par le biais d'un marteau.

              De plus faire une recherche avec re.search doit être plus lent que "Coach" in string, i think.
              • Partager sur Facebook
              • Partager sur Twitter
                24 février 2012 à 22:34:52

                Citation : fred1599

                T'as testé le code que tu as mis?

                <citation>f = open(filename, 'rU')
                      i = 0
                      content = []
                      for line in f.readlines():
                         content.append(line)
                      for l in content:
                         match = re.search(r"Coach", l)
                         if match:
                            resulta = content[i:3]
                            for x in xrange(0,3):
                               print "    ➤" + resulta[x].strip()
                         i+=1
                      
                      f.close()
                </citation>
                



                Malgré toutes les erreurs PEP8, indentation, etc..., ça retourne que les 2 lignes suivantes et non les 3.


                oui je l'est testé pour les erreurs indentation ces parce que je l'est copier/coller de mon éditeur :D si non dans mon code sa marche très bien et merci encore de ton aide fred1599 et pour les RegEx je les utilise par ce que dans mon code je cherche quelque chose de spécifique(ces pas Coach lol) et fichier texte n'est le 1.txt que je donner comme ex pour simplifier la tache a ce lui qui va m'aider

                et merci a toi aussi d.donald sa aide vraiment ;)
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  24 février 2012 à 22:39:30

                  Dans ma fonction, tu mets le fichier que tu souhaites et le mot que tu cherches (en l'occurence "word")

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 février 2012 à 22:56:27

                    Citation : fred1599

                    je trouve que les regex sont inutiles ici. J'ai l'impression d'un écrasement de mouche par le biais d'un marteau.

                    De plus faire une recherche avec re.search doit être plus lent que "Coach" in string, i think.



                    Je pense aussi mais le titre du post s'appelant "Regular expression" ...

                    Sinon, pour la recherche "classique", utiliser
                    line.find(r"Coach")
                    

                    lui permettra de rechercher n'importe quel partie de texte dans les lignes (pas uniquement un mot).
                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 février 2012 à 7:05:12

                      Citation : fred1599


                      possibilité oui, mais je trouve que les regex sont inutiles ici. J'ai l'impression d'un écrasement de mouche par le biais d'un marteau.



                      Absolument.


                      Citation : fred1599


                      De plus faire une recherche avec re.search doit être plus lent que "Coach" in string, i think.



                      Je viens de faire un test sur une chaîne aléatoire d'un million de caractères, la différence est à peine sensible.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 février 2012 à 7:27:29

                        f = open("1.txt").read()
                        for l in f[f.find('Coach'):].splitlines()[1:4]: print(l)
                        


                        • Partager sur Facebook
                        • Partager sur Twitter

                        Python c'est bon, mangez-en. 

                          25 février 2012 à 8:01:37

                          Citation : candide


                          Je viens de faire un test sur une chaîne aléatoire d'un million de caractères, la différence est à peine sensible.



                          Bizarre: en faisant le test de recherche sur un fichier texte de 34 Mo j'ai quand même une différence assez nette: 2,5 fois plus rapide pour "find" par rapport à "re.search" (python 2.7.2)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            25 février 2012 à 8:30:13

                            Citation : d.donald

                            Citation : candide


                            Je viens de faire un test sur une chaîne aléatoire d'un million de caractères, la différence est à peine sensible.



                            Bizarre: en faisant le test de recherche sur un fichier texte de 34 Mo j'ai quand même une différence assez nette: 2,5 fois plus rapide pour "find" par rapport à "re.search" (python 2.7.2)




                            C'est fort possible puisque 1 million de caractères c'est juste 1 Mo et que toi tu as une chaîne de 34 Mo. Mais il est concevable qu'utiliser ici les expressions régulières sera plus lent (mais j'aurais pensé bien plus lent encore).
                            • Partager sur Facebook
                            • Partager sur Twitter
                              25 février 2012 à 8:36:32

                              Citation : candide

                              Mais il est concevable qu'utiliser ici les expressions régulières sera plus lent (mais j'aurais pensé bien plus lent encore).



                              Tout à fait.

                              Après, ça dépend peut-être de ce que S@MY-H4CK3R veut faire comme recherche "spécifique" dans son fichier.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Regular Expression

                              × 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