@error404: `readlines()` kannst Du *einmal* auf einer geöffneten Datei aufrufen, dann sind alle Zeilen in eine Liste eingelesen und der Zeiger in der Datei steht am Ende, nach der letzten Zeile. Jedes weitere lesen liefert die leere Zeichenkette, weil das nichts mehr kommt nach dem Ende der letzten Zeile.
Du müsstest die Zeilen einzeln lesen und an die Namen binden. Also Beispielsweise:
Allerdings ist das durchnummerieren von Namen ein „code smell“. Das ist in der Regel eine Zeichen, dass man gar keine einzelnen Namen haben möchte, sondern eine Datenstruktur. Oft ist das eine Liste.
Wenn man eine Liste hat und *ein* Element daraus haben möchte, sollte man einen Indexwert verwenden und nicht die Slice-Syntax, die wieder eine Liste liefert. Wenn man einen Ausdruck hat bei dem grundsätzlich eine Liste mit *einem* Element heraus kommt, dann braucht man diese einelementige Liste nicht. Falls es das jeweilige Element in der Ursprungsliste nicht zwingend gibt, sollte man besser den `IndexError` behandeln, oder vorher explizit dafür sorgen, dass alle Elemente mit sinnvollen Werten belegt sind.
Die `str()`-Aufrufe mit `z1` und `z2` sind falsch. Du willst hier das Element aus der Liste holen, statt die Liste mit dem einen Element in ihre Zeichenkettendarstellung umzuwandeln.
Wenn man nur `sleep()` aus dem `time`-Modul benötigt, dann sollte man nicht mit dem Sternchen *alles* aus dem Modul importieren. Das macht Programme unübersichtlicher und birgt die Gefahr von Namenskollisionen.
Ungetestet:
Code: Alles auswählen
from itertools import chain, islice
from time import sleep
import lcddriver
def main():
lcd = lcddriver.lcd()
lcd.lcd_clear()
sleep(0.5)
with open('test.txt') as lines:
for i, line in enumerate(islice(chain(['------SD-Karte------'], lines), 4), 1):
lcd.lcd_display_string(line.rstrip(), i)
sleep(10)
lcd.lcd_clear()
if __name__ == '__main__':
main()