2017-10-15 3 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 등을 쓸 것이다.

이렇게하면 작동하지 않습니다. 두 피클 파일을 연결하는 것은 실제로 의미가 없습니다. 데이터를 연결하려면 먼저 파일에있는 내용을 모두 urlsToDump에 넣은 다음 urlsToDump을 새 데이터로 업데이트 한 다음 마침내 다시 덤프하십시오 (추가하지 않고 전체 파일을 덮어 씁니다).

-1

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

후에는 EOF를 타격 할 때까지 파일에서 반복 unpickle (반복 읽기)로하는 while 루프가 필요합니다.