2016-07-07 10 views
1

Ich probiere Python für einen einfachen Web-Scrapper aus, der eine Website nach Namen prüft, sie alle in ein Wörterbuch mit dem Link setzt und dann die Namen mit einer Liste vergleicht, die ich schon fertig habe Gerettet. Das Problem, an dem ich festhalte, ist, ein neues Wörterbuch mit den Namen von der Website zu erstellen, die nicht in der gespeicherten Liste sind.Versuch, ein Wörterbuch mit einer Textdatei zu vergleichen

together = dict(zip(names, links)) 
final_dict = {} 


for k, v in together.items(): 
    with open('file.txt', 'r') as f: 
     file_lines = f.readlines() 
     if k in file_lines: 
      print('All ready have that name.') 
      pass 
     else: 
      print(k, v) 
      final_dict.update({k, v}) 
    f.close() 

Die gespeicherte Datei hat nur den k Wert des together Wörterbuch.

+1

Ist Ihr Einzug gebrochen auf 'wenn k in file_lines'? –

+0

Nur in der Frage, nicht auf dem Skript. – warbirdn

Antwort

2

Versuchen

file_lines = f.readlines() 

zu

file_lines = f.read().splitlines() 

Die früheren hält das Newline \n am Ende der Linie zu ändern.

Darüber hinaus final_dict.update({k, v}) sollte wahrscheinlich final_dict.update({k: v}) sein und wie andere bereits darauf hingewiesen, haben Sie möglicherweise ein Problem mit Ihrer Einrückung.

+0

Ich nahm Ihren Tipp und kam mit: 'file_lines = [line.rstrip ('\ n') für Zeile in f]' und behoben die '({k: v})', Danke! – warbirdn

2

Ihr Algorithmus ist nicht sehr effizient. Für jeder Artikel in together liest es die gesamte Datei. Wenn Sie jede Zeile in der Datei behandeln, wie Sie es begegnen, ist es viel schneller:

together = dict(zip(names, links)) 

with open('file.txt', 'r') as f: 
    for line in f: 
     if line in together: 
      del together[line] 
Verwandte Themen