Seite 1 von 1

Einzelne Zeile per loadtxt oder genfromtxt einlesen

Verfasst: Freitag 6. Januar 2017, 14:56
von diri3l
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.

Re: Einzelne Zeile per loadtxt oder genfromtxt einlesen

Verfasst: Freitag 6. Januar 2017, 15:41
von BlackJack
@diri3l: `genfromtxt()` und das `max_rows`-Argument? Oder einfach eine Funktion selbst schreiben mit den ganz normalen Datei- und Zeichenkettenoperationen.

Re: Einzelne Zeile per loadtxt oder genfromtxt einlesen

Verfasst: Freitag 6. Januar 2017, 16:48
von diri3l
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.