Seite 1 von 1

Textdatei richtig auslesen

Verfasst: Freitag 24. September 2010, 15:33
von The Hit-Man
ich habe eine Textdatei, die an eine Art Tabelle erinnert. Diese muß ich nun auslesen. Die Textdatei sieht so aus:

Code: Alles auswählen

Vmid                                         Name                                                                                File                                               Guest OS         Version   Annotation
112    10a47231458907458943275894327589347534895743298573429857349587342895743298574389   [datastore1] 10a47231458907458943275894327589/10a47231458907458943275894327589.vmx   winNetStandardGuest   vmx-07              
16     M1                                                                                 [datastore1] M1/M1.vmx                                                               winNetStandardGuest   vmx-07              

Die erste zeile sind nur Überschriften, diese überlese ich natürlich. Ich habe zu erst versucht, die Datei mit dieser Routine aufzusplitten.

Code: Alles auswählen

		# erste zeile ( ueberschriften ueberlesen )
		datei.readline ()
		for z in datei:
			vmid = z[0:7]
			vmname = z[7:19]
			vmfilename = z[32:58]
			
			if str (vmname.strip ()) != str (name.strip ()):
				vmid = 0
			else:
				break
		datei.close ()
		return (vmid)
So weit so gut, rannte das auch, bis das File ( Filename ), in der Tabelle zu lang wurde ( kann ja irgendwann nicht mehr gehen ). Jetzt war meine Idee, immer so weit zu lesen, bis ein Leerzeichen kommt, dann würde wieder alles passen. Aber hat jemand ne Ahnung, wie ich immer bis zum nächsten Lehrzeichen lesen kann?

Re: Textdatei richtig auslesen

Verfasst: Freitag 24. September 2010, 15:49
von Gremlin
Wie wärs mit str.split?

Code: Alles auswählen

for line in datei:
    if line.startswith('Vmid'):
        continue # Erste Zeile...
    parts = line.split()
    vmid = parts[0]
    vmname = parts[1]
    ...

Re: Textdatei richtig auslesen

Verfasst: Freitag 24. September 2010, 15:59
von The Hit-Man
wow, danke sehr. hat auf anhieb geklappt !!! diese methode kannte ich noch gar nicht.

EDIT:
python ist echt verdammt mächtig. da kann man schon mal den überblick verlieren. ich hätte es vermutlich mit einer umständlichen schleife gemacht.

Re: Textdatei richtig auslesen

Verfasst: Freitag 24. September 2010, 17:01
von BlackJack
@The Hit-Man: Die Leerzeichen zwischen Funktion und Klammern sind sehr gewöhnungsbedürftig. Und bei ``return`` sind die Klammern unnötig. Wegen den Leerzeichen bei den Funktionsaufrufen könnte hier sogar noch jemand fälschlicherweise auf die Idee kommen ``return`` sei eine Funktion.

Was sollen in der ``if``-Bedingung die `str()`-Aufrufe eigentlich bewirken!? Und der Programmfluss sieht an der Stelle auch sehr undurchsichtig aus!? Soll das etwa die `vmid` zurückgeben falls der `name` gefunden wird und sonst 0? Das könnte man auch etwas weniger umständlich ausdrücken (ungetestet):

Code: Alles auswählen

            with open('dateiname.ext') as lines:
                # erste zeile ( ueberschriften ueberlesen )
                lines.next()
                for line in lines:
                    vm_id, vm_name, dummy, vm_file, dummy = line.split(None, 4)
                    if vm_name == name:
                        return vm_id
            # nicht gefunden
            return 0

Re: Textdatei richtig auslesen

Verfasst: Freitag 29. Oktober 2010, 01:16
von The Hit-Man
ich sollte mir echt mal nen anderen programmierstiel beibringen, ich weiß ;)