2016-08-03 11 views
1

Ich möchte eine Zeichenfolge nur dann in eine Datei schreiben, wenn sie sich nicht in der Datei befindet.Am effizientesten in bedingte Datei schreiben?

Mein erster Gedanke war, so etwas zu tun, aber es schreibt nichts in die Datei.

with open("FILE PATH", "a+") as database: 
    for lines in database.read(): 
     if 'MY STRING' in lines: 
      continue 
     else: 
      database.write('MY STRING') 

Erstens, was mache ich hier falsch? Zweitens, wenn dies richtig funktioniert, würde es einen effizienteren Weg geben, dies zu tun? Ich gehe davon aus, dass es da ist.

Dank

+1

'database.read()' wird eine einzelne Zeichenkette zurückgeben, so dass die Schleife jedes Zeichen in dieser Zeichenkette durchlaufen wird. Probieren Sie 'if 'MY STRING' in database.read():' stattdessen – TheGirrafish

+0

Wenn die Datei leer ist, gibt '.read()' eine leere Zeichenfolge zurück, so dass der Rumpf der for-Schleife niemals ausgeführt wird. Der Code funktioniert nur dann, wenn die Datei nicht leer ist und ineffizient ist, da Sie immer die gesamte Datei lesen, auch wenn "MY STRING" ganz vorne angezeigt wird. Sagen Sie uns, was Sie wollen und wie die Datei strukturiert sein soll, weil "Zeilen" irgendwie suggestiv sind ... – dhke

+1

@TheGirrafish Ihre Implementierung hat funktioniert. – Harrison

Antwort

1

database.read() wird Ihre Textdatei und gibt einen einzelnen String mit der gesamten Datei lesen. Wenn Sie über diese Zeichenfolge streichen, wird jedes Zeichen innerhalb dieser Zeichenfolge einzeln zurückgegeben, sodass Sie 'MY STRING' darin nicht finden. Schauen Sie sich einfach für 'MY STRING' innerhalb der Datei als Ganzes wie so:

with open("FILE PATH", "a+") as database: 
    if 'MY STRING' not in database.read(): 
     database.write('MY STRING') 

Sie brauchen nicht die erste if Aussage zu sehen, da es nur ein continue ist, wie dies nur ein if haben, so dass es ein wenig effizienter .

Verwandte Themen