Partage
  • Partager sur Facebook
  • Partager sur Twitter

Traiter un fichier

ligne par ligne

Sujet résolu
    20 mai 2011 à 17:34:50

    Bonjour, j'ai un petit script qui récupère une liste de liens depuis un fichier, ligne par ligne. Je traite ces liens grâce à une fonction de urllib2. Ensuite, je stocke le résultat dans un nouveau .txt. Or, rien ne se passe.

    Je vous joins le code.

    nb_fichier = sys.argv[1]
    
    d_brut = {}
    d_net = {}
    
    src = open('page-' + str(nb_fichier) + '.txt', 'r')
    try:
    	for ligne in src.readlines():
    		link_brut = ligne
    		d_brut[link_brut] = 1
    		
    	for link_brut in d_brut.keys():
    		link_net = urllib2.urlopen(link_brut)
    		link_net = link_net.geturl()
    		d_net[link_net] = 1
    
    f = open('results-' + str(nb_fichier) + '.txt', 'w')
    f.writelines('%d|%s \n' % (i, k) for i, k in zip( d_brut.keys(), d_net.keys() ) )
    f.close()
    



    Une idée peut-être ? Merci.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      20 mai 2011 à 17:58:11

      Tu veux quelquechose dans ce style?

      import os, urllib2
      
      join = os.path.join
      
      BUREAU = os.environ['PWD'] # path du dossier courant
      FILE = join(BUREAU, 'test.txt') # joindre le dossier courant au fichier
      
      FILE_LOG = join(BUREAU, 'log.txt') # idem que FILE
      
      f = open(FILE_LOG, 'a')
      
      for liens in open(FILE, 'r').readlines():
          data = urllib2.urlopen(liens)
          f.write(data.read())
      
      • Partager sur Facebook
      • Partager sur Twitter
        20 mai 2011 à 18:13:31

        Bonjour et merci de ta réponse rapide.

        Je tiens à préciser d'entrée que je fais du python avec mes connaissances de php. (Cherchez l'erreur)

        J'ai cependant bien compris la portée du bout de script que tu m'as proposé. File pointe vers le fichier à analyser et File_Log, le fichier de destination. Il me suffit donc en toute logique de specifier à la place de test.txt et log.txt mes fichiers. J'ai donc personnalisé comme il se doit ton script, mais cela ne donne aucun résultat.

        Il me faut préciser que dans l'idéal, le fichier de destination doit contenir le lien brut ainsi que le nouveau lien sur une même ligne.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          20 mai 2011 à 18:19:51

          Citation

          J'ai donc personnalisé comme il se doit ton script, mais cela ne donne aucun résultat.



          pas possible, il est testé, cependant si tu es en version 3, c'est normal dans ce cas, le module urllib2 a changé de nom

          import os, urllib.request
          
          join = os.path.join
          
          BUREAU = os.environ['PWD'] # path du dossier courant
          FILE = join(BUREAU, 'test.txt') # joindre le dossier courant au fichier
          
          FILE_LOG = join(BUREAU, 'log.txt') # idem que FILE
          
          f = open(FILE_LOG, 'a')
          
          for liens in open(FILE, 'r').readlines():
              data = urllib.request.urlopen(liens)
              f.write(data.geturl()+'\n')
          
          • Partager sur Facebook
          • Partager sur Twitter
            20 mai 2011 à 20:40:30

            J'ai retravaillé le script en gardant la base que j'avais établie. J'ai corrigé un bon nombre d'erreurs. Maintenant le script fonctionne au poil. Le code corrigé ci-dessous :

            import sys
            import re
            import string
            import httplib
            import urllib2
            
            nb_fichier = sys.argv[1]
            
            d = {}
            
            src = open('page-' + str(nb_fichier) + '.txt', 'r')
            
            for ligne in src.readlines():
            	d[ligne] = ''
            src.close()
            	
            for link_brut in d:
            	link_net = urllib2.urlopen(link_brut)
            	link_net = link_net.geturl()
            	d[link_brut] = link_net
            
            f = open('results-' + str(nb_fichier) + '.txt', 'w')
            for key in d:
            	if (key[:-1] != d[key]):
            		var = key[:-1] + '|' + d[key]
            		f.write( var + ',\n' )
            f.close()
            
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              21 mai 2011 à 10:12:18

              Citation

              src = open('page-' + str(nb_fichier) + '.txt', 'r')



              Cela veut dire que ton fichier existe, non? Il me semblait que tu voulais créer ton fichier, dans ce cas utiliser 'a' ou 'w' selon ce que tu veux et non 'r'.

              Bon admettons que c'est ce que tu veux, cette ligne ci-dessous,

              for ligne in src.readlines():
              	d[ligne] = ''
              


              ça devrait être quoi le résultat de d ? Qu'y a-t-il dans ton fichier, des liens? j'ai du mal à comprendre ce que tu souhaites faire.

              Cette ligne ci-dessous je ne comprend pas non plus

              for link_brut in d:
              	link_net = urllib2.urlopen(link_brut)
              	link_net = link_net.geturl()
              	d[link_brut] = link_net
              


              Déjà je pense qu'on peut faire plus simple avec des listes, mais je ne suis pas sûr que ça fonctionne étant donné le morceau de code précédent.

              Puis ce morceau de code ci-dessous,

              for key in d:
              	if (key[:-1] != d[key]):
              		var = key[:-1] + '|' + d[key]
              		f.write( var + ',\n' )
              


              Pourquoi faire simple quand on peut faire compliquer? On voit que tu viens du PHP :)

              Enfin il faudra être plus clair, pour moi ton code ne peut pas fonctionner, je ne sais pas si tu l'as modifié ou pas.

              • Partager sur Facebook
              • Partager sur Twitter

              Traiter un fichier

              × 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