For-Schleife ab bestimmter Zeile

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
twinky
User
Beiträge: 2
Registriert: Sonntag 4. September 2016, 19:11

Hallo,
ich bin noch eher ein Python Neuling. Ich versuche lange Text Dateien mit Messwerten einzulesen.
Das hab ich erst mit

Code: Alles auswählen

a = np.genfromtxt(datei,skip_header=3, delimiter=' ', dtype=None)
for i in a:
    b = a.split(' ')
	c = b[0]
versucht, weil man damit auch einen Header eingeben kann, also nicht bei der ersten Zeile beginnen muss.
Allerdings habe ich Probleme bei Dateien die mit Leerzeichen getrennt sind. Obwohl ich als delimiter=' ' angebe, bekomme ich immer Fehlermeldungen wenn ich mit split(' ') auf bestimmte Spalten zugreifen möchte (object has no attribute 'split' )

Als 2. Variante hab ich noch die normale read() Methode.
Eine for-Schleife über die Datei:

Code: Alles auswählen

for a in raw.split('\n'):
    spalte = a.split(' ')                 
    x = spalte[0]
Hier ist allerdings mein Problem dass damit ja über alle Zeilen gearbeitet wird.
Gibt es eine Möglichkeit mit einer for-Schleife sagen wir nur ab Zeile 3 bis zum Ende der Datei laufen zu lassen?

Ich hoffe ich hab das Problem einigermaßen verständlich ausgedrückt.

Vielen Dank und viele Grüße
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@twinky: die erste Variante macht so keinen Sinn, da `a` ein numpy-Array ist und somit natrülich keine split-Methode hat. Auf der anderen Seite teilt genformtxt schon die Zeilen an Leerzeichen auf, so dass das split völlig überflüssig ist.
Um also jeweils das erste Element jeder Zeile in `c` zu laden, reicht

Code: Alles auswählen

data = np.genfromtxt(datei, skip_header=3, delimiter=' ', dtype=None)
for row in data:
    c = row[0]
Will man das ganze wirklich händisch Nachprogrammieren, was genfromtxt schon automatisch macht, würde man islice auf dem Dateiobjekt benutzen:

Code: Alles auswählen

from itertools import islice
with open(filename) as rows:
    for row in islice(rows, 3, None):
        row = row.split()
        c = row[0]
twinky
User
Beiträge: 2
Registriert: Sonntag 4. September 2016, 19:11

Hallo Sirius,
vielen Dank für deine schnelle Antwort und danke für den Hinweis.
Da hab ich genfromtxt wohl etwas falsch verstanden. Aber so ist das natürlich viel einfacher!
Super und Danke!
Antworten