Vergleicht Zwei Text-Dateien, Entfernen Sie die doppelten Zeilen, und Schreiben die Ergebnisse in eine neue text-Datei
Habe ich zwei text-Dateien (das sind nicht gleich Anzahl der Zeilen/Größe). Ich würde gerne vergleichen, jede Zeile der kürzere text-Datei mit jeder Zeile der längere text-Datei. Wie es vergleicht, wenn es keine doppelten strings, möchte ich diese entfernt. Nicht zuletzt möchte ich schreiben das Ergebnis in eine neue Textdatei und drucken Sie den Inhalt.
Ist es ein einfaches Skript kann das für mich tun?
Jede Hilfe wäre sehr geschätzt werden.
Text-Dateien nicht sehr groß sind. Man hat etwa 10 Zeilen, und die andere hat über 5. Der code, den ich versucht habe (das scheiterte kläglich) unter:
for line in file2:
line1 = line
for line in file1:
requested3 = file('request2.txt','a')
if fnmatch.fnmatch(line1,line):
line2 = line.replace(line,"")
requested3.write(line2)
if not fnmatch.fnmatch(line1,line):
requested3.write(line+'\n')
requested3.close()
- Nur um zu klären - Sie möchten, um die Ausgabe der strings aus dem kurzen text-Datei, die Subtraktion von beliebigen Zeichenfolgen aus dem kurzen text-Datei, in der lange text-Datei? Auch, wie groß sind diese Dateien, und welchen code hast du geschrieben so weit?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist einfach so. Dies wird kopieren von Zeilen aus
shortfile
zunewfile
, ohne dass Sie alle in Erinnerung, wenn Sie auch existieren inlongfile
.Wenn du auf Python 2.6 oder älter, würden Sie brauchen, um zu brüten, die mit Aussagen:
Wenn du auf Python 2.5, müssen Sie entweder:
in der ganz oben Ihrer Datei, oder verwenden Sie einfach
etc. und schließen Sie jede Datei selbst.
Wenn Sie brauchen, um zu manipulieren, die Linien, die eine explizite
for
Schleife ist in Ordnung, der wichtige Teil istset()
. Suche nach einem Element in einem set ist schnell, Suche eine Zeile in einer Liste ist langsam.with
undas
sind reservierte Wörter und es ist ein standard-feature in 2.6, 2.5, benötigen Sie denfuture
- Anweisung.Vorausgesetzt, die Dateien sind plain text, jede saite ist auf eine neue Zeile durch \n ein neue-Zeile-Zeichen:
Erklärung:
rstrip()
aberlower()
ändern können, Bedeutung. Auf der Suche durch eine lange Liste wird auch langsam; das ist genau das, wasset()
ist für.Ich würde verwenden difflib, es macht es leicht, Vergleiche dazu/diffs. Es ist ein nettes tutorial für die es hier. Wenn Sie wollte nur die Zeilen, die einzigartig in der kürzeren Datei:
[x[2:] for x in difflib.ndiff(short, long) if x.startswith('-')]
Ihrem code, wie es steht, prüft jede Zeile vor der Zeile in der anderen Datei. Aber das ist nicht, was Sie wollen. Für jede Zeile in der ersten Datei, die Sie brauchen, um zu überprüfen, ob jede Zeile in der anderen Datei entspricht, und dann drucken Sie es aus, wenn es keine Spiele.