Heim  >  Artikel  >  Backend-Entwicklung  >  Wie springe ich effizient zu einer bestimmten Zeile in einer großen Textdatei?

Wie springe ich effizient zu einer bestimmten Zeile in einer großen Textdatei?

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 03:39:30129Durchsuche

How to Efficiently Skip to a Specific Line in a Large Text File?

Springen zu einer bestimmten Zeile in einer großen Textdatei

Beim Umgang mit großen Textdateien kommt es häufig vor, dass man direkt springen muss zu einer bestimmten Zeile. Ein einfacher Ansatz besteht darin, die Datei iterativ durchzulesen. Dies kann jedoch ineffizient sein, wenn Sie die Zielzeilennummer im Voraus kennen.

Das Problem:

Verwendung des Code-Snippets vorausgesetzt:

startFromLine = 141978
urlsfile = open(filename, "rb", 0)
linesCounter = 1
for line in urlsfile:
    if linesCounter > startFromLine:
        DoSomethingWithThisLine(line)
    linesCounter += 1

Dieser Code liest die Datei Zeile für Zeile und erfordert die Verarbeitung aller vorhergehenden Zeilen, auch wenn diese irrelevant sind.

Eine effizientere Lösung:

Um effizient zu einer bestimmten Zeile zu springen, können Sie einen zweistufigen Ansatz verwenden:

  1. Erstellen Sie eine Offset-Liste:

    • Lesen Sie die Datei Zeile für Zeile und erstellen Sie eine Liste line_offset, die den Versatz jedes Zeilenanfangs speichert.
  2. Zielzeile suchen:

    • Angesichts der Zielzeilennummer n verwenden Sie file.seek(line_offset[n]), um den Dateizeiger an den Anfang dieser Zeile zu bewegen.

Hier ist ein Beispiel:

line_offset = []
offset = 0
for line in file:
    line_offset.append(offset)
    offset += len(line)
file.seek(0)

target_line = 141978
file.seek(line_offset[target_line])

Mit diesem Ansatz können Sie direkt zur gewünschten Zeile springen und so den unnötigen Aufwand für die Verarbeitung irrelevanter Zeilen vermeiden.

Das obige ist der detaillierte Inhalt vonWie springe ich effizient zu einer bestimmten Zeile in einer großen Textdatei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn