Code gibt leere Liste zurück

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
Brot
User
Beiträge: 5
Registriert: Freitag 13. Mai 2016, 18:11

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
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@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]
Brot
User
Beiträge: 5
Registriert: Freitag 13. Mai 2016, 18:11

Danke
Antworten