Seite 1 von 1

Code gibt leere Liste zurück

Verfasst: Dienstag 28. Juni 2016, 20:14
von Brot
Der Code soll eigentlich die Zeilen einer Datei in eine Liste "verwandeln".
Wenn man jetzt aber

Code: Alles auswählen

readtagfile('filename')
eingibt, kommt als Antowrt immer nur so etwas:

Code: Alles auswählen

[' ',' ',' ',' ',' ',' ',]
Hier noch der Code des Programms:

Code: Alles auswählen

def readtagfile(filenameR):
	tagfile = open(filenameR, 'r')
	taglist = []
	numlines = sum(1 for line in tagfile)
	i = 1
	for i in range(1, numlines):
		readpicname = tagfile.readline()
		taglist.append(readpicname.strip())
		i = i+1
	return taglist

Re: Code gibt leere Liste zurück

Verfasst: Dienstag 28. Juni 2016, 20:35
von Sirius3
@Brot: das "so etwas" ist in Wirklichkeit

Code: Alles auswählen

['','','','','','']
Das liegt daran, dass Dateiobjekte Iteratoren sind, die man nur einmal durchlaufen kann. Nachdem Du also die Anzahl der Zeilen ermittelt hast, liefert Dir readline nur noch leere Zeichenketten, weil die Datei schon bis zum Ende gelesen wurde.
Das Zählen der Zeilen ist unnötig, die Variable i von Hand zu zählen ist überflüssig, weil es die for-Schleife schon tut und i zudem gar nicht benutzt wird. Die Datei wird nicht wieder geschlossen und eingerückt wird per Konvention mit 4 Leerzeichen pro Ebene.
Alles in allem sollte Deine Funktion so aussehen:

Code: Alles auswählen

def readtagfile(filename):
    with open(filename, 'r') as tagfile:
        return [line.strip() for line in tagfile]

Re: Code gibt leere Liste zurück

Verfasst: Donnerstag 30. Juni 2016, 17:12
von Brot
Danke