Statt der while-Schleife benutzt man eine for-Schleife.
Und Du hast jetzt genau den Fehler gemacht, vor dem wir hier die ganze Zeit warnen. Zeichen können aus mehreren Bytes bestehen, so dass die Länge eines Strings nicht der Anzahl der Bytes in der Datei entspricht.
Du mußt im Binären Modus arbeiten.
Code: Alles auswählen
# Testfile erzeugen
with open('text', 'w') as file:
file.write('Hallo\n')
file.write('Du wohnst\n')
file.write('ÄÖÜäöüß[]{}€#><*\n')
file.write('zu Hause\n')
file.write('Und Du bist\n')
file.write('hier der Chef!\n')
# Index für Testfile aufbauen
with open('text', 'rb') as file:
posindex = [0]
for zeile in file:
posindex.append(file.tell())
# Zeigen der Indexliste
print(posindex)
# Heraussuchen einer vorgebenen Zeile
suchpos = 2
with open('text', 'rb') as file:
file.seek(posindex[suchpos])
ergebnis = file.read(posindex[suchpos+1] - posindex[suchpos]).decode()
print(file.tell())
print(f'[{ergebnis[:-1]}]')