Messerte aus Datenfiles vergelichen/bearbeiten

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
Lufia
User
Beiträge: 83
Registriert: Samstag 13. Mai 2006, 10:04
Wohnort: Berlin

Sonntag 14. Mai 2006, 11:40

Hallo,
ich bin ganz neu am python lernen, und habe das Forum hier entdeckt und natürlich gleich einige Fragen. :D die ich loswerden möchte.

Bis jetzt habe ich nur C programmiert, und möchte für die einfachen täglich anfallenden Arbeiten Python verwenden.

Ich modelliere am PC stömungen und bekomme als Output Daten-Files die in etwa wie folgt aussehen:

x y wert_a wert_b wert_c wert_d

Jetzt möchte ich Verschiedene Datenfiles miteinander vergleichen, z.B wert_a an Stelle x y in Dateii1 - dem wert in Datei2.

Ich bin leider nicht so geübt mit dem Umgang mit Dateien, also einlesen,...etc. Daher habe ich einige Fragen die vielleicht etwas doof sind sorry. :oops:

1)
Ich frage mich da es sehr große Dateien sind ob es besser ist die Dateien vollständig einzulesen und im Programm in Strukturen, etc. zu speichern und dann zu vergleichen. Oder ob es besser ist die Dateien Zeilenweise einzulesen und zu vergleichen. Mir gefällt es besser ersteinmal alles einzulesen und dann zu vergleichen, den Output in eine neue Datei zu schreiben, weiß aber als Python Neuling einfach nicht ob ich da auf Grund der Datengröße an irgendwelche Grenzen stoße ? 'Und wie es mit der Performance aussieht.


2)
Die nächste Frage ist ob es schon fertige Module gibt die einem bei solchen Arbeiten behilflich sind, also beim einlesen / vergleich ?

3)
Als letztes wollte ich noch fragen ob jemand hier Erfahreungen bei der grafischen Auswertung gemacht hat, ich rechne auf unstrukturierten Gittern (art FEM), und habe bis jetzt außer kommerziellen Programmen nur mal Gnuplot und OpenDX probiert. Wobei Gnuplot für meine Dinge scheinbar nicht geeignet ist, evtl. kennt jemand gute Alternativen. Es gibt wohl schon etwas um den OpenDX zu verwenden wie ich beim googlen entdeckt habe. Falls jemand jedoch noch gute Alternativen kennt wäre es toll wenn er mir bescheid sagt.

So, ich bin um alle Tips & Tricks dankbar

Leo
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Sonntag 14. Mai 2006, 12:56

Zu 1)
Es hängt halt davon ab, wieviel RAM du benutzen willst. Bei zwei 1MB-Dateien ist doch heute noch ok, wenn jede Datei allerdings 512MB groß ist, würde ich jede Zeile einzeln behandeln. Da du nicht genau geschrieben hast, was du vergleichen willst, kann man dir hier keinen Tipp geben. Wenn du aber Zeile 1 in Datei A mit Zeile 1 in Datei B usw. vergleichen willst, ist eine Zeilenbasierte Lösung zu empfehlen.

Zu 2)
Das einlesen dürfte in deinem Falle recht einfach gehen:

Code: Alles auswählen

for line in open("Datei"):
  line = line.split()
  # oder, als alternative:
  # x,y,wert_a,wert_b,wert_c,wert_d = line.split()
  # im ersten Falle kannst du x über line[0], y über line[1] etc. bekommen
Zu 3)
http://matplotlib.sourceforge.net/
Damit kannst du dann direkt in deinem Pythoncode auch die Diagramme erzeugen.
Lufia
User
Beiträge: 83
Registriert: Samstag 13. Mai 2006, 10:04
Wohnort: Berlin

Sonntag 14. Mai 2006, 14:25

Vielen Dank für die Hilfe, dann scheint mein Vorhaben ja doch recht einfach zu sein :) mit c habe ich mich nie an so scheinbar triviale Dinge getraut.
Da die Dateien ja doch recht groß sind werde ich die von dir vorgeschlagene Variante wählen und die Dateien einzeln zeilenweise öffnen und ganz einfache Operationen (differenz zweier Wert,etc. )vornehmen.
Matplotlib sieht für 2D Sachen vor allem Diagramme, etc. ja super aus. Für das erste müßte das auf jeden Fall reichen.

Viele Dank nochmal,
:D
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Sonntag 14. Mai 2006, 14:29

Noch als Hinweis, wie es für 2 Dateien geht

Code: Alles auswählen

dat1 = open("Datei1")
dat2 = open("Datei2")
while True:
  line1 = dat1.readline()
  line2 = dat2.readline()
  #readline liefert '' bei Dateiende. Bei leeren Zeilen liefert es '\n'
  if line1 == '' or line2 == '':
    break
  ...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Sonntag 14. Mai 2006, 14:58

Joghurt hat geschrieben:

Code: Alles auswählen

  #readline liefert '' bei Dateiende. Bei leeren Zeilen liefert es '\n'
Hi!

Ergänzung: Aber nur dann, wenn die Datei mit den Flags "rU" geöffnet wird. Nur dann kann man sicher sein, dass "\n" und nicht auch "\r\n" oder "\r" als Zeilenende verwendet wird.
Siehe Hilfe zu "file" oder "open". --> http://python.org/doc/current/lib/built-in-funcs.html

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten