Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich mit Python eine große Textdatei effizient in umgekehrter Reihenfolge lesen?

Wie kann ich mit Python eine große Textdatei effizient in umgekehrter Reihenfolge lesen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-29 14:03:14209Durchsuche

How Can I Efficiently Read a Large Text File in Reverse Order Using Python?

Eine Datei in umgekehrter Reihenfolge mit Python lesen

Angenommen, Sie haben eine lange Textdatei und möchten deren Inhalt von der letzten Zeile bis lesen die Anfangszeile. Wie können Sie dies in Python erreichen?

Antwort:

Die folgende Python-Generatorfunktion liest eine Datei effektiv in umgekehrter Reihenfolge:

import os

def reverse_readline(filename, buf_size=8192):
    """A generator that returns the lines of a file in reverse order"""
    with open(filename, 'rb') as fh:
        segment = None
        offset = 0
        fh.seek(0, os.SEEK_END)
        file_size = remaining_size = fh.tell()
        while remaining_size > 0:
            offset = min(file_size, offset + buf_size)
            fh.seek(file_size - offset)
            buffer = fh.read(min(remaining_size, buf_size))
            # remove file's last "\n" if it exists, only for the first buffer
            if remaining_size == file_size and buffer[-1] == ord('\n'):
                buffer = buffer[:-1]
            remaining_size -= buf_size
            lines = buffer.split('\n'.encode())
            # append last chunk's segment to this chunk's last line
            if segment is not None:
                lines[-1] += segment
            segment = lines[0]
            lines = lines[1:]
            # yield lines in this chunk except the segment
            for line in reversed(lines):
                # only decode on a parsed line, to avoid utf-8 decode error
                yield line.decode()
        # Don't yield None if the file was empty
        if segment is not None:
            yield segment.decode()

Diese Generatorfunktion weist eine speichereffiziente Leistung auf und eignet sich für große Dateien. Es teilt die Datei in überschaubare Teile auf und verarbeitet sie Zeile für Zeile rückwärts.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Python eine große Textdatei effizient in umgekehrter Reihenfolge lesen?. 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