Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoin d'aide

    2 décembre 2011 à 20:09:52

    Bonsoir à tous,
    j'ai besoins de vos lanternes pour m'aider à résoudre un problème que je n'arrive pas à résoudre.
    En fait j'ai une série de fichier dans un document,et j'aimerais faire une recherche de mot dans ces fichiers que je parcours et ensuite me créer un fichier me donnant à chaque fois ou se troue ce mot.

    Voici mon code :
    compteur=0
            i=0
            name = 'titi'   #c'est un exemple !
            listedefichier=glob("./dossier/*")
            for filename in listedefichier:
                    test = open(filename,'r')
                    data = test.read()
                    if re.search(name,data) :
                            fichiersave=open("./dossier/fichiersave","a")
                            #compteur = compteur + 1
                    fichiersave.write(basename(filename)+"\n")
    
            fichiersave.close()
            page ='fichiersave'
    


    Enfin ça ne marche pas très bien...Je n'arrive pas à faire ce que je veux. soit il m'ecris tous les fichiers et en plusieurs fois ( le nombre de fois ou il trouve le mot ) soit il me fait rien...

    Je vous remercie !
    • Partager sur Facebook
    • Partager sur Twitter
      2 décembre 2011 à 23:12:38

      Bonsoir,
      Il n'y aurait pas un problème d'indentation?
      Ton write n'est pas dans le bloc if re.search(name,data):.
      De plus pourquoi ouvrir le fichiersave à chaque fois.

      compteur=0
      i=0
      name = 'titi'   #c'est un exemple !
      fichiersave=open("./wiki.d/articles/fichiersave","w")
      listedefichier=glob("./dossier/*")
      for filename in listedefichier:
          test = open(filename,'r')
          data = test.read()
          if re.search(name,data) :
              #compteur = compteur + 1
              fichiersave.write(basename(filename)+"\n")
      fichiersave.close()
      page ='fichiersave'
      


      • Partager sur Facebook
      • Partager sur Twitter
        3 décembre 2011 à 10:40:55

        Oui mais même comme ça ,ça ne veut pas marcher...j'ai rien d’écrit dans mon nouveau documents...Peut être que je m'y prends pas de la bonne façon ?

        merci
        • Partager sur Facebook
        • Partager sur Twitter
          3 décembre 2011 à 12:53:19

          Je viens de tester, chez moi ça marche.
          Es-tu sûr que ton fichier de sortie se trouve à la racine de ton projet?
          Tu peux remplacer "./wiki.d/articles/fichiersave" par "wiki.d/articles/fichiersave" et "./dossier/*" par "dossier/*"

          Sinon rajoute quelques print pour voir ce qu'il ce passe. Si ton fichier est bien placé c'est surement que re.search(name,data) retourne None.
          • Partager sur Facebook
          • Partager sur Twitter
            3 décembre 2011 à 13:19:52

            ça marche nickel,j'avais oublié un detail.
            Par contre j'aimerais mettre en place un système de compteur,mais je n'arrive pas. Je m'explique : la ou vous voyez en commentaire : compteur = compteur + 1 ,c'est ce que je voulais faire.
            A chaque tour de boucle,si il trouve le mot,il incrémente le compteur. Cependant,la methode .write n'accepte pas le " compteur" car il me dit impossible de transformer un string en int,il me semble...
            par exemple fichiersave.write("Votre mot apparait :" + compteur)
            Comment je pourrais procéder ?

            merci
            • Partager sur Facebook
            • Partager sur Twitter
              3 décembre 2011 à 13:40:47

              fichiersave.write("Votre mot apparait :" + str(compteur))

              Mais si tu as plusieurs fois ton mot dans le fichier, cela ne fonctionnera pas. re.search s'arrête de cherche dès qu'il a trouvé le mot.
              Sinon tu peux utiliser re.findall:

              compteur = 0
              name = 'tyty'
              fichiersave=open("out.txt","w")
              listedefichier=glob("dossier/*")
              for filename in listedefichier:
                  test = open(filename,'r')
                  data = test.read()
                  res = re.findall(name,data)
                  if res:
                      compteur += len(res)
                      fichiersave.write(basename(filename)+"\n")
                      
              fichiersave.write("Votre mot apparait :" + str(compteur))
              fichiersave.close()
              


              Tu ne voulais pas aussi la position des mots?
              • Partager sur Facebook
              • Partager sur Twitter
                3 décembre 2011 à 13:42:48

                Je vais tenter ça !! merci beaucoup !
                En fait je suis très débutant donc je ne connais pas énormément de méthode...
                Mais la position des mots je n'arrive pas mais si tu saurais me dire,c'est avec plaisir !! merci

                EDIT : ça fonctionne nickel !
                • Partager sur Facebook
                • Partager sur Twitter
                  3 décembre 2011 à 14:05:30

                  Si tu veux les positions, tu peux utiliser re.finditer. Il est également conseillé d'utiliser with pour ouvrir les fichiers:

                  name = 'tyty'
                  listedefichier=glob("dossier/*")
                  fichiersave=open("out.txt","w")
                  with open("out.txt","w") as fichiersave:
                      for filename in listedefichier:
                          with open(filename,'r') as test:
                              data = test.read()
                              listPos = []
                              for match in re.finditer(name, data):
                                  listPos.append(match.start())
                                  compteur += 1
                              if listPos:
                                  fichiersave.write("%s, %i fois, position: %s\n"%(basename(filename), len(listPos), listPos))
                              
                      fichiersave.write("\nVotre mot apparait :" + str(compteur))
                  


                  Tu as quelle version de python? Je ne suis pas sur que le formatage de chaine que j'utilise fonctionne avec python3.
                  Est-ce de gros fichiers que tu veux analyser?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 décembre 2011 à 17:34:01

                    wouah ça à l'air super compliqué...
                    Pourquoi ouvrir avec with ? qu'est ce que c'est ? Et pouvez vous m'expliquer ces % ?

                    Je crois que j'utilise python 2.6 ou plus,il faut que je regarde.
                    Pour les fichiers,non ce ne sont que des fichiers de quelques ko,ce sont des fichiers textes..;
                    merci ! Je vais essayer ça en attendant !
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 décembre 2011 à 19:15:48

                      C'est clair que c'est compliqué pour démarrer. Je serai toi j'essaierai de me débrouiller avec les méthodes standard de string. Notamment str.find()

                      f = open("file.txt")
                      
                      name = "titi"
                      
                      #iter toutes les lignes du fichier
                      for line in f:
                      	#affiche l'index du mot ou -1 si il n'est pas dans la ligne
                      	print line.find(name)
                      
                      f.close()
                      


                      Si les with t'embête, ne les utilise pas.

                      pour les %, c'est pour formater une chaine de caractère:


                      print "un nombre: %i"%5
                      print "une chaine: %s"%"titi"
                      print "un nombre: %i, une chaine: %s"%(5, "titi")
                      


                      Les %i et %s sont remplacé par las valeurs situer après la chaine.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Besoin d'aide

                      × 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