Ich bin neu in Python und versuche, "Blöcke" von Daten aus einer Datei zu lesen. Die Datei wird geschrieben so etwas wie:Lesen von Datenblöcken aus einer Datei in Python
# Some comment
# 4 cols of data --x,vx,vy,vz
# nsp, nskip = 2 10
# 0 0.0000000
# 1 4
0.5056E+03 0.8687E-03 -0.1202E-02 0.4652E-02
0.3776E+03 0.8687E-03 0.1975E-04 0.9741E-03
0.2496E+03 0.8687E-03 0.7894E-04 0.8334E-03
0.1216E+03 0.8687E-03 0.1439E-03 0.6816E-03
# 2 4
0.5056E+03 0.8687E-03 -0.1202E-02 0.4652E-02
0.3776E+03 0.8687E-03 0.1975E-04 0.9741E-03
0.2496E+03 0.8687E-03 0.7894E-04 0.8334E-03
0.1216E+03 0.8687E-03 0.1439E-03 0.6816E-03
# 500 0.99999422
# 1 4
0.5057E+03 0.7392E-03 -0.6891E-03 0.4700E-02
0.3777E+03 0.9129E-03 0.2653E-04 0.9641E-03
0.2497E+03 0.9131E-03 0.7970E-04 0.8173E-03
0.1217E+03 0.9131E-03 0.1378E-03 0.6586E-03
and so on
Jetzt möchte ich in der Lage sein, nur einen Block von Daten aus diesen vielen Blöcken spezifizieren und lesen. Ich benutze numpy.loadtxt('filename',comments='#')
, um die Daten zu lesen, aber es lädt die ganze Datei auf einmal. Ich suchte online und jemand hat einen Patch für die numpy io Routine erstellt, um Lese-Blöcke zu spezifizieren, aber es ist nicht im Mainstream numpy.
Es ist viel einfacher, Blöcke von Daten in gnuplot zu wählen, aber ich würde die Routine schreiben müssen, um die Verteilungsfunktionen zu zeichnen. Wenn ich bestimmte Blöcke Lesen herausfinden können, wäre es viel einfacher, in Python sein. Außerdem verschiebe ich alle meine Visualisierungscodes von IDL und gnuplot nach python, also ist es schön, alles in Python zu haben, anstatt Dinge in mehreren Paketen herumzustreuen.
Ich dachte über gnuplot aus Python aufrufen, um einen Block zu einer Tabelle Plotten und die Ausgabe zu einem gewissen Array in Python zuweisen. Aber ich fange noch und ich konnte nicht die Syntax herauszufinden, es zu tun.
Irgendwelche Ideen, Hinweise, um dieses Problem zu lösen, wäre eine große Hilfe.
So möchten Sie die Benutzer angeben, sagen wir ein Wertepaar (i, j) und lese alle Zeilen zwischen der Zeile "# ij" und der nächsten Leerzeile? –
Alsmot!Das Genauere, was ich tun kann, ist, i, j angeben zu können, wobei i der Startblock und j der letzte Block ist und ein Block durch Zeilen definiert ist, die durch zwei oder mehr leere Zeilen getrennt sind. – toylas