2017-10-15 4 views
1

ユーザーは、コマンドラインの引数としてURLの束を与えることができます。過去に与えられたすべてのURLはpickleで直列化されています。スクリプトは、指定されたすべてのURLをチェックします。一意のURLは、シリアライズされてファイルに追加されます。少なくともそれは起こっているべきことです。何も追加されていません。しかし、書き込みモードでファイルを開くと、新しい一意のURLが書き込まれます。だから何を与える?コード:ファイルに追加するときにpickle.dumpは何もダンプしません。

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

独創性は素晴らしいですが、これは子供にやさしいウェブサイトであることを覚えています;-( –

+2

"ダンピンではありません"というのはちょっと間違っています** – mentalita

答えて

2

Pickleは、与えたデータを特別な形式(例:それはあなたがそれを与えるファイルにいくつかのヘッダー/メタデータ/ etcを書くでしょう。

この方法では動作しません。 2つのピクルスファイルを連結することは実際には意味がありません。データの連結を達成するには、ファイル内の内容をurlsToDumpに読み込み、新しいデータでurlsToDumpを更新してから、最後にもう一度ダンプしてください(ファイル全体を上書きしないで追加してください)。

-1

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

後には、EOFを打つまで、ファイルから繰り返し化したりunpickle化したり(繰り返し読み)に、whileループを必要としています。

関連する問題