Seite 1 von 1
2 Dateien vergleichen
Verfasst: Mittwoch 27. Juli 2005, 07:16
von Gast
Moin,
Als Anfängerin habe Ich eine Frage:
Wie kann man 2 Dateien miteinander vergleichen und die Differenz (also nur die Strings, die unter in eine andere Datei schreiben?
Für Hilfe wäre Ich dankbar
/lg
sunnyi
Verfasst: Mittwoch 27. Juli 2005, 07:37
von Gast
Hallo,
ich bin auch
wie wäre mit dem
>>> result = list(d.compare(text1, text2))
Details findest du unter 4.4.4 Differ Example aus Python Library Reference
viel Glück
Verfasst: Mittwoch 27. Juli 2005, 09:12
von Gast
Yep,
Soweit war Ich schon. Aber Ich muss zugeben, dass mir der Umstieg von PHP nach Python ein wenig schwer fällt.
Mir ist beispielsweise nicht klar, wie Ich das Differ Objekt benutze
/lg
sunnyi
Verfasst: Mittwoch 27. Juli 2005, 12:09
von Gast
Ein ganz einfacher Vergleich zweier Dateien wäre beispielsweise folgendes:
Code: Alles auswählen
inputFile1 = file("C:/file1.txt")
inputFile2 = file("C:/file2.txt")
outputFile = file("C:/file3.txt","w")
line1 = inputFile1.readline()
line2 = inputFile2.readline()
while line1 != "" or line2 != "":
if line1 != line2:
outputFile.write("Datei 1: "+line1)
outputFile.write("Datei 2: "+line2+"\n")
line1 = inputFile1.readline()
line2 = inputFile2.readline()
inputFile1.close()
inputFile2.close()
outputFile.close()
Das berücksichtigt natürlich nicht den Fall, dass sich irgendwo in einer Deiner Dateien eine neue Zeile eingeschlichen hat. Wäre das der Fall, so würde natürlich natürlich alles ab der zusätzlichen Zeile unterschiedlich sein.
Verfasst: Donnerstag 28. Juli 2005, 06:26
von jens
Anonymous hat geschrieben:Mir ist beispielsweise nicht klar, wie Ich das Differ Objekt benutze
Zum
Differ Objekt gibt's ein Beispiel:
http://www.python.org/doc/current/lib/d ... mples.html
Hier ein Beispiel von mir:
Code: Alles auswählen
import sys,difflib
def get_lines( filename ):
f = file( filename, "r" )
lines = f.readlines()
f.close
return lines
content1 = get_lines( r"c:\datei1.txt" )
content2 = get_lines( r"c:\datei2.txt" )
d = difflib.Differ()
sys.stdout.writelines( d.compare(content1, content2) )
Für eine HTML-Ausgabe der ergebnisse gibt's hier
http://www.python-forum.de/viewtopic.php?t=2487 schon was...
Verfasst: Samstag 30. Juli 2005, 18:02
von Gast
Anonymous hat geschrieben:Ein ganz einfacher Vergleich zweier Dateien wäre beispielsweise folgendes:
Code: Alles auswählen
inputFile1 = file("C:/file1.txt")
inputFile2 = file("C:/file2.txt")
outputFile = file("C:/file3.txt","w")
line1 = inputFile1.readline()
line2 = inputFile2.readline()
while line1 != "" or line2 != "":
if line1 != line2:
outputFile.write("Datei 1: "+line1)
outputFile.write("Datei 2: "+line2+"\n")
line1 = inputFile1.readline()
line2 = inputFile2.readline()
inputFile1.close()
inputFile2.close()
outputFile.close()
Das berücksichtigt natürlich nicht den Fall, dass sich irgendwo in einer Deiner Dateien eine neue Zeile eingeschlichen hat. Wäre das der Fall, so würde natürlich natürlich alles ab der zusätzlichen Zeile unterschiedlich sein.
der code hat noch ein viel größeres problem ... wenn nämlich die datei nur aus einer einzigen datei besteht (beispielsweise sind alle angaben durch ";" abgetrennt), dann wird schon beim kleinsten unterschied die komplette zeile ausgegeben und man ist wieder da, wo man angefangen hat.
--> daher wär es vielleicht sinnvoll für jede anwendung eines vergleichs eine problemspezifische ausgabe zu erstellen
mfg
Verfasst: Samstag 30. Juli 2005, 18:04
von cime
die antwort kam gerade von mir, hatt nur vergessen mich einzuloggen, sry
*/Edit\*: hab grad gesehen, dass ich mich verschrieben hatte, hab das Wort "Datei" durch "Zeile" ersetzt, jetzt ergibts auch Sinn
Anonymous hat geschrieben:Anonymous hat geschrieben:Ein ganz einfacher Vergleich zweier Dateien wäre beispielsweise folgendes:
Code: Alles auswählen
inputFile1 = file("C:/file1.txt")
inputFile2 = file("C:/file2.txt")
outputFile = file("C:/file3.txt","w")
line1 = inputFile1.readline()
line2 = inputFile2.readline()
while line1 != "" or line2 != "":
if line1 != line2:
outputFile.write("Datei 1: "+line1)
outputFile.write("Datei 2: "+line2+"\n")
line1 = inputFile1.readline()
line2 = inputFile2.readline()
inputFile1.close()
inputFile2.close()
outputFile.close()
Das berücksichtigt natürlich nicht den Fall, dass sich irgendwo in einer Deiner Dateien eine neue Zeile eingeschlichen hat. Wäre das der Fall, so würde natürlich natürlich alles ab der zusätzlichen Zeile unterschiedlich sein.
der code hat noch ein viel größeres problem ... wenn nämlich die datei nur aus einer einzigen zeile besteht (beispielsweise sind alle angaben durch ";" abgetrennt), dann wird schon beim kleinsten unterschied die komplette zeile ausgegeben und man ist wieder da, wo man angefangen hat.
--> daher wär es vielleicht sinnvoll für jede anwendung eines vergleichs eine problemspezifische ausgabe zu erstellen
mfg cime
Verfasst: Dienstag 2. August 2005, 11:06
von jens
Wenn dem so ist (alles in einer Zeile) dann arbeite doch mit .split(";")...