2017-03-29 4 views
1

Ich brauche die Möglichkeit, zwei Textdateien zu vergleichen. Datei 1 ist ein Chat-Protokoll und Datei 2 ist eine Wortliste mit Schlüsselwörtern. Ich habe Mühe, die gewünschte Ausgabe zu erhalten, die idealerweise jedes Mal angezeigt wird, wenn eines der Schlüsselwörter in Datei 2 im Chat-Protokoll angezeigt wird. Irgendwelche Ideen, wie ich dieses Ergebnis erreichen könnte?Vergleichen einer Textdatei mit einer anderen Textdatei in Python?

edit *

dies ist der Code, den ich zur Zeit ist versucht, zu verwenden, aber der Ausgang i bekommen ist, dass es die beiden Dateien in das Textfeld in der gui druckt. Die Ausgabe muss zeigen, welche Zeilen die Wörter aus Datei 2 in der Datei 1 vorkommen. Ein Teil des Codes stammt aus einer Schlüsselwortsuchfunktion, die ich bereits bearbeitet habe.

def wordlistsearch(): 

filename = tkFileDialog.askopenfile(filetypes=(("Text files", "*.txt") ,)) //file1 
mtxt = filename.readline() 
i =0 
filename2 = tkFileDialog.askopenfile(filetypes=(("Text files", "*.txt") ,)) //file2 

while i<10000: 
    keystring = filename2.readline() 
    print keystring 
    participant = mtxt.split("(")[0] 
    temppart2 = mtxt.split("(")[-1] 
    keyword = temppart2.split(")")[0] 
    if mtxt.find(str(keystring)) != -1: 
     print i, ": ", mtxt 
    i=i+1 
    mtxt = filename.readline() 
+1

Was haben Sie versucht? Fügen Sie ein Beispiel Ihres Codes und Details, warum es nicht funktioniert – asongtoruin

+0

Können Sie genauer sein, wie ein Beispiel für beide Dateien und was haben Sie bisher getan/versucht? –

Antwort

1

Wenn Sie alle Wörter in Datei 1 finden möchten, die auch in File2 sind, können Sie verwenden:

keywords = set([word for line in open("keyword_file","r") for word in line.split()]) 

words = set([word for line in open("log_file","r") for word in line.split()]) 

common = words.intersection(keywords) 

Um das Auftreten eines Spiels zu finden beim Lesen der Datei 1 statt:

keywords = set([word for line in open("keyword_file","r") for word in line.split()]) 

for line in open("log_file","r"): 
    for word in line: 
     if word in keywords: 
      print "found {0} in line {1}".format(word, line) 
+1

Das ist ein sehr guter Ansatz. –

0

Das ist eine sehr gute Frage. Ich persönlich denke, dies zu tun:

# I suppose the keywords has non repeated words separated by a space 
keywords_file = open('path_to_file_keywords') 
keywords_dict = {word: 0 for word in keywords_file.readlines().strip().split(' ')} # Iterate through all the words removing '\n'characters and generate a dict 

# Then read the chat log 
chat_log_file = open('path_to_file_chat_log') 
chat_log_words_generator = (word for word in chat_log_file.readlines().strip().split(' ')) # Create a generator with the words from the chat log 


for word in chat_log_words_generator: 
    try: 
     word_count = keywords_dict[word] 
    except KeyError: 
     continue # The word is not a keyword 
    word_count += 1 # increment the total 
    keywords_dict[word] = word_count # override the value of the count in the dict 

Am Ende der keywords_dict sollte die Zählung des Vorkommens aller Keywords haben.

+1

anstelle eines Inkrements in der gesamten Vorkommen der Schlüsselwörter ist es sowieso zu ändern, um zu zeigen, welche Zeile die Schlüsselwörter im Chat-Protokoll auftreten? wie ich bereits eine Schlüsselwort-Suchfunktion habe, die jede Zeile druckt, wo das bestimmte Wort auftritt. Prost –

+0

Große Frage! Wenn Sie 'enumerate' auf' readlines' verwenden, erhalten Sie ein Tupel wie '(index, item)': '(index, line.strip() für index, Zeile in enumerate (chat_log_file.readlines()))' ' . Mit diesem Generator könnten Sie die Wörter wie zuvor bekommen. –

+0

wie ich bin tkinter konnte die open ('path_to_file_chat_log') Zeile zu etwas wie tkFileDialog.askopenfile (filetypes = (("Textdateien", "*. Txt"),)), wie ich möchte der Benutzer sein Sie können auswählen, welche Dateien verglichen werden sollen, nachdem auf eine Schaltfläche geklickt wurde. –

Verwandte Themen