2 Dateien vergleichen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
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
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
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
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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
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
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wenn dem so ist (alles in einer Zeile) dann arbeite doch mit .split(";")...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten