Bestimmte Zeile z.b. 40000 einer txt Datei auslesen Python3?

4 Antworten

Ich kenne Python nicht, aber ich denke, auch Python wird das selbe Problem haben, wie alle anderen auch:

Die Datei speichern nicht zeilenweise

Der Zeilenumbruch ist nur ein Zeichen (bei Windows meist noch ein Zweites dazu), beim Lesen der Daten "sieht" es also nur eine lange Folge von irgendwelchen Zeichen.

Es kann also nicht wissen, welche Zeile die Nr. 40000 ist - außer Du weißt, wie lang jede einzelne Zeile ist, dann könntest Du Zeilenlänge * Anzahl Zeilen nutzen um dann an diese Position zu springen, das geht weit schneller, als alles davor einzulesen.

Weißt Du nicht, wie lang eine Zeile ist, dann wirst Du jede Zeile einzeln lesen und zählen müssen.


ohwehohach  19.12.2019, 13:04

Ach sorry - falsch verstanden. Ignore...

0

Du liest Zeichen für Zeichen ein.

Dazu hast du eine Variable, die die Anzahl der gelesenen Zeilenumbrüche enthält. Jedesmal wenn zu einen einliest, erhöht sich der Wert der Variablen.

Wenn du ein anderes Zeichen eingelesen hast und der Wert der Variablen genau gleich 39999 ist, gibst du das gelesene Zeichen aus.

Ist der Wert der Variablen größer, kannst du die Datei schließen und abbrechen.

Also mit Phyton kenne ich es nicht. Aber allgemein geht die komplette Datei im RAM haben und dort mit einer Splitt Funktion in Array einteilen am schnellsten. Nachteil du musst soviel Ram haben wie groß die Datei ist. Hast du.das nicht dann würde ich trotzdem nicht Zeichenweise einlesen wie hier vorgeschlagen, das ist zu lahm. Sondern in Packetgrösse die für dein RAM geeignet ist. Zum Beispiel 1 GB Weise.


iqKleinerDrache  19.12.2019, 13:59

an der Grenze zur Paketgrösse musst du natürlich rückwärts zeichenweise nach dem letzten Zeilenumbruch suchen und das bereits temporär speichern und an den Anfang des neuen Splittarray in Element 1 anfügen.

0
iqKleinerDrache  19.12.2019, 14:08
@iqKleinerDrache

hast du eine Datei die nur 1 Zeichen Zeilenumbruch hat, zb Linux, dann brauchst du das nicht um nimmst einfach das letzte Array Elenent des Alten Pakets und fügst es an das erste des neuen vorher an. Das letzte Element des alten Pakets ist ungültig. Und die Nummerierung der Zeule des neuen 1ten wird nun zu dieser Zeilennummer

also temp = a(577443) : a(1) = temp + a(1)

0

Mein Python ist nicht sonderlich gut, aber ich würde denken, dass es da ähnlich läuft, wie überall sonst auch: Du liest die ersten 39999 Zeilen ein, ohne sie auszugeben und gibst dann die 40000 aus.

Alternative für RAM-Schleudern: Du liest alle Zeilen in ein String-Array und gibst dann die mit dem Index 39999 aus (Voraussetzung: Python indiziert ab 0).


verreisterNutzer  19.12.2019, 12:57

Wie kann ich dann diese Zeile auslesen???

0
ohwehohach  19.12.2019, 13:02
@verreisterNutzer

Hä? Du meinst bei einem Array?

Weil Du dann mit einem Index auf einen einzelnen String zugreifen kannst. Das kannst Du nicht, wenn Du nur die Datei aufmachst. Aber - ein gegebenes Zeilenendezeichen vorausgesetzt - wird beim Einlesen in ein Array ja je Zeile ein Eintrag im Array gemacht.

0