2016-07-30 9 views
1

Ich versuche, eine Liste von Themen für ein anderes Projekt zu erstellen, und ich speichere die Themen in Topics.txt. Wenn die Themen jedoch in der Datei gespeichert sind, möchte ich keine doppelten Themen. Wenn ich also meine Themen in meiner Topics.txt Datei speichere, speichere ich sie auch in einer Duplicates.txt Datei. Ich möchte eine bedingte Anweisung erstellen, die keine Themen zu Topics.txt hinzufügt, wenn sich die Themen in Duplicates.txt befinden. Mein Problem ist, ich weiß nicht, wie ich eine bedingte Anweisung erstellen könnte, die überprüfen könnte, ob das Thema in Duplicates.txt aufgeführt ist. Ein Problem kann auftreten, wenn Sie nach Stichwörtern wie "Musik" suchen, da "Elektro- Musik" das Wort "Musik" enthält.Überprüfen von Daten in einer Datei auf Duplikate (Python)

Entry = input("Enter topic: ") 
Topic = Entry + "\n" 
Readfilename = "Duplicates.txt" 
Readfile = open(Readfilename, "r") 
Readdata = Readfile.read() 
Readfile.close() 
if Topic not in Duplicates: 
    Filename = "Topics.txt" 
    File = open(Filename, "a") 
    File.append(Topic) 
    File.close() 
    Duplicate = Topic + "\n" 
    Readfile = open(Readfilename, "a") 
    Readfile.append(Topic) 
    Readfile.close() 
+0

führen würde Können Sie einige Beispiele und Beispielcode hinzufügen? – cssko

+0

Wie speichern Sie die Themen? Eine pro Zeile? – janbrohl

+2

Ich bin mir nicht sicher, ob eine reine Textdatei wirklich Ihren Bedürfnissen entspricht. Eine SQLite-Tabelle könnte eine unterschiedliche Durchsetzung haben und auch eine Schlüsselwortsuche durchführen. –

Antwort

1

Sie können eine Datei Zeile für Zeile gelesen, die in einer Lösung wie dieser

Entry = input("Enter topic: ") 
Topic = Entry + "\n" 
Readfilename = "Duplicates.txt" 
found=False 
with open(Readfilename, "r") as Readfile: 
    for line in Readfile: 
     if Topic==line: 
      found=True 
      break # no need to read more of the file 

if not found: 
    Filename = "Topics.txt" 
    with open(Filename, "a") as File: 
     File.write(Topic) 

    with open(Readfilename, "a") as Readfile: 
     Readfile.write(Topic) 
+0

Wie könnte dies transformiert werden, um aktivierte Variationen des Themas auszuschließen? – Capattax

+0

@ Capattax werfen Sie einen Blick auf die [String-Methoden] (https://docs.python.org/3/library/stdtypes.html#string-methoden) - sie können viele nützliche Dinge tun, in der Regel werden Zeichenfolgen case-sensitive verglichen ('" a "==" A "' ergibt "False") – janbrohl

0

Sie können Ihre Themen in einem Satz speichern. Ein Set ist eine Sammlung von einzigartigen Gegenständen.

topics = {'Banjo', 'Guitar', 'Piano'} 

Sie können mit der Mitgliedschaft überprüfen:

>>> 'Banjo' in topics 
True 

Sie neue Dinge über .add()

auf einen Satz hinzufügen
topics.add('Iceskating') 
>>> topics 
set(['Banjo','Guitar', 'Piano', 'Iceskating']) 

Python 3 Docs auf Sets here. Die Tutorial-Seite zu den Sets ist here.

+0

Dies ist nützlich, um nach Duplikaten in einer Datei zu suchen, aber ich habe zwei Programme, die Themen zur 'Topics.txt' hinzufügen. Das erste Programm fügt Themen manuell hinzu, während das andere Programm Seiten für Themen durchsucht. Hätte ich also zwei Sätze, einen Satz für jedes Programm, würden sie nur Duplikate zu ihren jeweiligen Sätzen hinzufügen. Sie wären nicht in der Lage, Duplikate aus dem anderen Satz zu identifizieren. – Capattax

+0

Das Schöne an einem Set ist, wenn Du Duplikate in Deinen Originaldaten hast, werden diese entfernt. Wenn Sie also eine Liste "[" Eins "," Zwei "," Zwei "," Drei "] haben und Sie diese in eine Menge kopieren, wird diese Menge" ["Eins", "Zwei", "Drei" ] '. – cssko

+0

Um hinzuzufügen, scheint es, als ob das, was Sie tun, Gefahr läuft, zu einfach zu sein, einfache TXT-Dateien zu verwenden, um Ihre Daten zu speichern. Ich gehe zu second @ cricket_007s früheren Vorschlag, eine SQLite-Tabelle zu verwenden. – cssko