ASCII Datei 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
sailerthomas
User
Beiträge: 5
Registriert: Dienstag 31. März 2009, 10:23

Hallo,
ich arbeite mich gerade in Python ein, komme aber bei folgendem Problem einfach nicht weiter.
Ich habe eine ASCII Datei die folgendermaßen aussieht:
  • 1 326 50 1 0.1524 36.63681
    1 355 51 1 0.1524 36.63681
    1 356 51 1 0.1524 18.52501
    1 357 51 1 0.1524 36.63681
    1 108 52 1 0.3048 566.14038
    1 322 52 1 0.1524 36.63681
    1 357 52 1 0.3048 240.91499
In den Spalten stehen Indizes für Uhrzeit, geogr. Länge, geogr. Breite Höhe über Grund, Stickoxidausstoß und Ruß, und das für die gesamte Atmosphäre.
Nun möchte ich Stickoxid- und Rußwerte zusammenfassen. D.h. die Zeilen zu einer Zeile zusammenfassen, die doppelt sind und deren geogr. Länge, Breite und Höhe in einem bestimmten Bereich liegen, und dabei Stickoxid und Ruß aufsummieren (also die räumliche Auflösung verringern).
Hat jemand einen Tipp wie ich das hinkriegen könnte?
vielen Dank
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das csv-Modul ist was für dich.
sailerthomas
User
Beiträge: 5
Registriert: Dienstag 31. März 2009, 10:23

Meine Daten sind Tab seperated. Kann ich damit meine Daten auch entsprechend zusammenfassen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dem CSV-Modul ist es egal was der Separator ist, solange du weißt was es ist und dem Reader sagst, was der Separator ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sailerthomas
User
Beiträge: 5
Registriert: Dienstag 31. März 2009, 10:23

Und wie könnte das dann aussehn?
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Warum nimmst Du nicht einfach ein Spreadsheet-Programm wie Excel oder OOCalc hierfür?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sailerthomas hat geschrieben:Und wie könnte das dann aussehn?
Schon mal überlegt in die Dokumentation zu schauen oder mal die Forumssuche zu benutzen? Es ist ja nicht so dass es nicht genug Beispiele gäbe.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sailerthomas
User
Beiträge: 5
Registriert: Dienstag 31. März 2009, 10:23

Eine ASCII Datei hat über 100MB, das packt weder Excel noch openofficeCalc.
sailerthomas
User
Beiträge: 5
Registriert: Dienstag 31. März 2009, 10:23

Hab eben zum Daten zusammenfassen nix gefunden, bzw. bin daran gescheitert entsprechende Beispiele für mein Problem abzuändern. Die Daten nach meinen Wünschen zu bearbeiten geht, nur dieses "zusammenfassen" bereitet mir probleme. Bin auch nicht erst seit heut an dem Problem.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Bei den Größen könnte es auch für Python mit dem csv-Module schwierig werden.

Einfach mal so Zeilen in einer CSV-Datei zusammenfassen geht eben nicht. Die Reader im csv-Modul lesen zeilenweise ein, d.h. Du brauchst eine Datenstruktur zum Speichern und Vergleichen, das ist bei über 100MB tricky und Du mußt evtl. auslagern in temporäre Dateien oder via DB usw.

OOCalc spielt übrigens bis 2**16 Reihen mit.

Edit:
Falls die Daten halbwegs sortiert vorliegen (also gleiche geograph. Koordinaten direkt hintereinander), könntest Du die auch stackweise mergen, z.B.:
- 10000 Zeilen lesen
- Datensätze zusammenführen
- rausschreiben
- nächste 10000 Zeilen usw.
Das ganze könntestet Du dann für das Ergebnis wiederholen und so die Daten immer weiter zusammenfassen.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Oder Du nimmst numpy. Sähe dann so aus:

Code: Alles auswählen

In [1]: from numpy import fromfile

In [2]: input = fromfile('test.dat', sep=" ").reshape(-1,6) # für eine Datei mit 6 Spalten

In [3]: input
Out[3]: 
array([[  1.00000000e+00,   3.26000000e+02,   5.00000000e+01,
          1.00000000e+00,   1.52400000e-01,   3.66368100e+01],
       [  1.00000000e+00,   3.55000000e+02,   5.10000000e+01,
          1.00000000e+00,   1.52400000e-01,   3.66368100e+01],
       [  1.00000000e+00,   3.56000000e+02,   5.10000000e+01,
          1.00000000e+00,   1.52400000e-01,   1.85250100e+01],
       [  1.00000000e+00,   3.57000000e+02,   5.10000000e+01,
          1.00000000e+00,   1.52400000e-01,   3.66368100e+01],
       [  1.00000000e+00,   1.08000000e+02,   5.20000000e+01,
          1.00000000e+00,   3.04800000e-01,   5.66140380e+02],
       [  1.00000000e+00,   3.22000000e+02,   5.20000000e+01,
          1.00000000e+00,   1.52400000e-01,   3.66368100e+01],
       [  1.00000000e+00,   3.57000000e+02,   5.20000000e+01,
          1.00000000e+00,   3.04800000e-01,   2.40914990e+02]])

In [4]: input[:,5].sum() # Summe der sechsten Spalte
Out[4]: 972.12761999999998
Du müßtest u. U. den Separator auf Tabs setzen. Im Prinzip funktioniert so etwas aber auch mit Dateien von 100 MB Größe.

HTH
Christian
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@CM:
Für eine 100MB Datei schaffst meiner nicht (512MB RAM). Langsam wird ein neuer Rechner fällig...
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

jerch hat geschrieben:@CM:
Für eine 100MB Datei schaffst meiner nicht (512MB RAM). Langsam wird ein neuer Rechner fällig...
Dachte ich auch vor einiger Zeit. Dann hab ich ihn auf 768 MB aufgerüstet und jetzt ist wieder alles gut ... :D
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Stellt für mich mit meinem Laptop - selbe RAM-Größe wie jerch - auch auch ein Problem dar. Aber ich gehe in so einem Fall auch von einem Uni-Hintergrund aus. Und da sollte der Chef schon in bessere & größere Rechner investieren. Vor noch nicht mals 'nem halben Jahr, stellte so ein File für mich kein Problem dar und ich weiß dass es funktioniert. :D
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Hat man Zugriff auf ein größeres Rechenmonster, keine Frage. Aber die Otto-Normal-rechner-ausrüstung sieht in den Instituten doch häufig noch schlechter aus (vllt. gilt das ja nur für Ost-Unis).
Kleine Anekdote hierzu: Als ein Bekannter vor Jahren sich einen damals sehr gut ausgestatteten Pentium4 anschaffte und den mit ins astrophysikalische Institut schleppte (im Rahmen seiner Diplomarbeit), bettelte der Chef um Rechenzeit, um auf diesem Rechner irgendwelche Positionsberechnungen über Nacht laufen lassen zu können. Der Rechner war deutlich besser bestückt als selbst der Unix-Server vor Ort.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

jerch hat geschrieben:Der Rechner war deutlich besser bestückt als selbst der Unix-Server vor Ort.
Genau. Und paging galt als echt cooles Feature um mit wenig RAM auskommen zu können. Andererseits sind ältere und langsamere Rechner -zumindest zum Lernen- nicht unbedingt von Nachteil.
Antworten