Datei zeilenweise einlesen

  • Textdaten bestehen aus Zeilen mit verschiedenen Längen. Darum ist es nicht möglich, direkt auf eine bestimmte Zeilennummer zu springen oder festzustellen, wieviele Zeile es hat, ohne dass man vorher den Text einliest und schaut, wieviel Zeilenumbrüche man hat. Selbstverständlich kannst du eine Funktion schreiben, die die Zeilenanzahl herausgibt oder eine bestimmte Zeile einliest. Das ändert aber nichts daran, dass du die Datei bis zur gewünschten Zeile einlesen musst. Im Fall der Ermittlung der Anzahl Zeilen muss immer die ganze Datei eingelesen werden. Dabei wird die Anzahl der Zeilenumbrüche in der Datei gezählt. Das ist in allen Programmiersprachen so, nicht nur bei Python. Ofz wird das im Hintergrung gemacht und du merkst gar nichts davon.


    Ein Betriebssystem bietet normalerweise die Möglichkeit die Grösse einer Datei zu ermitteln, ohne das sie geöffnet wird. Das sagt aber nichts über die Anzahl Zeilen aus. Selbst die Anzahl Zeichen lässt sich nicht zuverlässig daraus ableiten. So ist zum Beispiel bei UTF-8 nicht mehr jedes Zeichen 1 Byte gross.


    Python kann sehr gut mit solchen Daten umgehen. Vorausgesetz, du hast genügend RAM. Es wird alles ins RAM geladen und dort verarbeitet.

  • Hättest Du da vielleicht irgendwo einen Link, wo man nachlesen könnte?
    Es müßte ja eine Zeilen-Nummer übergeben werden, bzw. man muß feststellen, wieviel Zeilen das file überhauot hat.

    Dass man es erst ganz öffnen und damit den RAM belasten muß, befürchte ich durchaus. Aber da muß ich dann halt durch. Ziel ist, in einer Datei die Zahl der Zeilen festzustellen, in bestimmten Zeile zu separieren und darin bestimmte Teile und zu analysieren und sie dann über ein selbstgebasteltes Protokoll durch eine UART rauszuschieben.

  • Hallo BL007,


    es gibt es die Methode readline() in der File - Klasse.

    Ich bin aber nicht sicher, ob das File wirklich zeilenweise eingelesen wird oder nur der Text zeilenweise aus dem internen Buffer zurückgegeben wird.


    Code
    1. with open('text.txt','r') as file:
    2. line=file.readline()
    3. while line:
    4. print(line)
    5. line=file.readline()

    Es gibt auch diese Möglichkeit:

    Code
    1. with open('text.txt','r') as file:
    2. for line in file:
    3. print(line)

    Auch hier gelten die gleichen Unsicherheiten wie bei der ersten Methode.


    Gruss

    René

  • Hallo,


    in der Lektion17 geht's ja darum, Logs in Dateien zu schreiben. Dabei gibt's in der Klasse BisScreen die Methode read_lineS_from_file() und die ruft "file.readlineS()" auf.

    Das "s" hab ich mal hevorgehoben, weil das auf die Mehrzahl hinweist. Mich würde interessieren, ob man bei µPython auch ein read_line_from_file(x) finden könnte, wo eben nur eine -dann ganz bestimmte- Zeile aufgerufen wird.

    In den Docs hab ich leider nichts greifbares gefunden.