Datei in Chunk teilen

8

Ich versuche eine Datei zu teilen, die wie folgt formatiert ist:

%Vor%

Die Kombination @target Gx.Sy ist eindeutig und jede Datengruppe wird immer durch & terminiert.

Ich habe es geschafft, die Datei in Brocken als:

zu teilen %Vor%

Ich habe zwei Probleme:

1) Die Präambelzeilen vor den echten Daten werden ebenfalls gruppiert, so dass das Skript nicht funktioniert, wenn eine Präambel vorhanden ist. Es ist unmöglich vorherzusagen, wie viele Zeilen das wären; Aber ich versuche nach die @target und

zu gruppieren

2) Ich möchte die Arrays als G0 [S0, S0] und G1 [S1, S2] bezeichnen; aber ich kann das nicht tun.

Freundliche Hilfe

UPDATE : Ich versuche, diese Daten in einem verschachtelten np Array von G0 [S0, S1, ...], G1 [S0, S1, ..] zu speichern, so dass ich es in Matplotlib verwenden kann.

    
BaRud 22.02.2017, 19:27
quelle

3 Antworten

1

Die folgenden Funktionen erledigen die Aufgabe:

%Vor%

Um Ihre Datei in Stücke zu teilen, müssen Sie nur diesen Code ausführen:

%Vor%

Schrittweise Demo

chunks ist ein Wörterbuch, in dem der Schlüssel G (entweder 0 oder 1 ) lautet:

%Vor%

Der Wert von dictionary chunks ist ein anderes Wörterbuch, in dem der Schlüssel S ( 0 , 1 oder 2 in diesem Beispiel) ist und der Wert ein NumPy-Array ist, das die numerischen Daten für enthält %Code%. Sie können auf diesen Datenblock wie folgt zugreifen: Gi.Sn , wobei die Indizes chunks[i][n] und i die Werte von n bzw. G sind.

%Vor%

S ist chunks[i][n].shape[0] für alle 2 und i , aber n kann einen beliebigen Wert annehmen, d. h. die Anzahl der Zeilen numerischer Daten kann von Chunk zu Chunk variieren.

formatierte_datei.txt

Dies ist die Datei, die ich im Beispiellauf verwendet habe. Es besteht aus sechs Teilen, nämlich chunks[i][n].shape[1] , G0.S0 , G0.S1 , G0.S2 , G1.S0 und G1.S1 .

%Vor%     
Tonechas 04.03.2017, 20:57
quelle
1

Hier ist ein Ansatz, der einen Generator und np.genfromtxt verwendet. Vorteil: Licht auf Speicher. Es filtert die Datei on the fly daher erfordert nicht das gesamte Ding zur Verarbeitung in den Speicher zu laden.

UPDATE:

Ich habe den Code gestrafft und das Ausgabeformat in Arrays von Arrays geändert. Wenn beispielsweise G zwischen 0...3 und S zwischen 0...5 liegt, wird ein 4x6-Array mit Arrays erstellt.

%Vor%     
Paul Panzer 28.02.2017 14:11
quelle
1

BEARBEITEN - Ich nahm das Feedback zu meiner Liste und entschied, es zu einem Diktat zu machen. Diese Lösung hat den Vorteil, dass sie den Speicherverbrauch gering hält und vollständig dynamisch ist (d. H. Nicht von der Kenntnis der Anzahl von G-Blöcken a priori abhängt.

Ich habe das re -Paket verwendet, das ähnlich ist wie numpy behandelt I / O über loadtxt() . Außerdem gibt es wirklich keinen Punkt , der ein verschachteltes numpy Array von numpy Arrays erzeugt, Ich gebe nur eine verschachtelte integrierte list of numpy Arrays zurück. Da Ihre Daten inhomogen sind, ist dieser Ansatz genauso effizient (und viel einfacher):

%Vor%

Der Zugriff erfolgt einfach durch Übergeben der richtigen G, S-Koordinate an die zurückgegebene chunk_arr .

%Vor%     
Crispin 06.03.2017 15:52
quelle

Tags und Links