Hallo,
ich bin ganz neu am python lernen, und habe das Forum hier entdeckt und natürlich gleich einige Fragen. 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.
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
Messerte aus Datenfiles vergelichen/bearbeiten
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:
Zu 3)
http://matplotlib.sourceforge.net/
Damit kannst du dann direkt in deinem Pythoncode auch die Diagramme erzeugen.
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
http://matplotlib.sourceforge.net/
Damit kannst du dann direkt in deinem Pythoncode auch die Diagramme erzeugen.
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,
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,
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
...
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi!Joghurt hat geschrieben:Code: Alles auswählen
#readline liefert '' bei Dateiende. Bei leeren Zeilen liefert es '\n'
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.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.