Einzelne Zeile per loadtxt oder genfromtxt einlesen

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
diri3l
User
Beiträge: 2
Registriert: Freitag 6. Januar 2017, 14:21

Hallo zusammen,

ich habe als output eines Simulationstools (NREL FAST) eine txt mit ~100 Spalten und ~90k Zeilen als output. Darin enthalten sind einfache Zahlenwerte. Ich kann erfolgreich die Tabelle mittels numpy loadtxt einlesen (skiprows=8 um den Header auszulassen) und auch die Spalten beliebig gegeneinander plotten (1. Spalte ist die Zeit, die anderen, sind verschiedene Kräfte, Verschiebungen, etc.).

Code: Alles auswählen

import numpy as np 
import matplotlib.pyplot as plt
a=np.loadtxt('test.txt', skiprows=8)

fig, ax = plt.subplots()                                 # start new figure to plot in
ax.plot(a[:,0],a[:,36])                                  # Plot TwrBsFxt
ax.grid(True)                                            # Switch Grid
plt.ylabel('Force at tower base in x-direction in kN')
plt.xlabel('Time in s')
plt.tight_layout()                                          # Tight layout, minimal borders
plt.savefig('TwrBsFxt.eps', format='eps', dpi=1000)
plt.savefig('TwrBsFxt.png', format='png', dpi=1000)
Das Problem ist aber, dass sich die Reihenfolge der Spalten je nach Konfiguration im Simulationsprogramm ändern kann.
In Zeile 7 der txt stehen die Bezeichnungen der einzelnen Spalten. Ich würde nun gerne mein Plot-Script so ergänzen, dass der Plot-Befehl in Abhängigkeit der Variablen in Zeile 7 ausgeführt wird.

Angenommen in Spalte 0 steht die Variable "Zeit", in Spalte 37 die variable "X-Force" dann möchte ich gerne, dass das Script die Zeile 7 der txt nach "X-Force" durchsucht und in Abhängigkeit davon die jeweilige Spalte gegen die Spalte "Zeit" plottet.

Dazu müsste ich aber glaube ich extra nochmal die Spalte 7 einlesen, nach "X-Force" suchen und den entsprechenden Spaltenwert ermitteln lassen. Die ersten Spalten könnte ich in genfromtxt per

Code: Alles auswählen

skip_header
und alles nach Zeile 7 per

Code: Alles auswählen

skip_footer
überspringen. Da sich die Anzahl der Zeilen aber ständig ändert funktioniert das leider auch nicht.

Für Hilfe wäre ich hier dankbar.
Zuletzt geändert von Anonymous am Freitag 6. Januar 2017, 15:29, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@diri3l: `genfromtxt()` und das `max_rows`-Argument? Oder einfach eine Funktion selbst schreiben mit den ganz normalen Datei- und Zeichenkettenoperationen.
diri3l
User
Beiträge: 2
Registriert: Freitag 6. Januar 2017, 14:21

Da war ich wohl zu blöd zum Gucken. :oops: Skip_header und Max_rows funktionieren so wie ich mir das vorgestellt habe. Jetzt kanns weiter gehen. Vielen Dank dafür und ein schönes Wochenende.
Antworten