2017-10-15 22 views
1

L'utilisateur peut donner un tas d'URL en tant qu'args de ligne de commande. Toutes les URL données dans le passé sont sérialisées avec pickle. Le script vérifie toutes les URL données, si elles sont uniques, puis sérialisées et ajoutées à un fichier. Au moins c'est ce qui devrait se passer. Rien n'est ajouté. Toutefois, lorsque j'ouvre le fichier en mode écriture, la nouvelle URL unique est écrite. Alors qu'est-ce qui donne? Le code est:pickle.dump vide rien lors de l'ajout au fichier

def get_new_urls(): 
    if(len(urls.URLs) != 0): # check if empty 
     with open(urlFile, 'rb') as f: 
      try: 
       cereal = pickle.load(f) 
       print(cereal) 
       toDump = [] 
       for arg in urls.URLs: 
        if (arg in cereal): 
         print("Duplicate URL {0} given, ignoring it.".format(arg)) 
        else: 
         toDump.append(arg) 
      except Exception as e: 
       print("Holy bleep something went wrong: {0}".format(e)) 
      return(toDump) 

urlsToDump = get_new_urls() 
print(urlsToDump) 
# TODO: append new URLs 
if(urlsToDump): 
    with open(urlFile, 'ab') as f: 
     pickle.dump(urlsToDump, f) 

# TODO check HTML of each page against the serialized copy 
with open(urlFile, 'rb') as f: 
    try: 
     cereal = pickle.load(f) 
     print(cereal) 
    except EOFError: # your URL file is empty, bruh 
     pass 
+2

Alors que l'originalité est agréable, rappelez-vous, ceci est un site Web pour les enfants ;-( –

+2

"n'est pas dumpin 'rien" est juste ** faux ** – mentalita

Répondre

2

Pickle écrit les données que vous lui donnez dans un format spécial, par ex. il va écrire un en-tête/métadonnées/etc, dans le fichier que vous lui donnez.

Il n'est pas prévu de travailler de cette façon; concaténer deux fichiers pickle n'a pas vraiment de sens. Pour obtenir une concaténation de vos données, vous devez d'abord lire tout ce qui se trouve dans le fichier dans votre urlsToDump, puis mettre à jour votre urlsToDump avec de nouvelles données, puis le supprimer définitivement (en écrasant le fichier entier, sans l'ajouter).

-1

Après

with open(urlFile, 'rb') as f: 

vous avez besoin d'une boucle while, à plusieurs reprises unpickle (lire à plusieurs reprises) à partir du fichier jusqu'à ce qu'il atteigne EOF.