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 :roll:

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(";")...