„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich mit Python eine große Datei in umgekehrter Reihenfolge effizient lesen?

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

Gepostet am 2025-03-23
Durchsuche:800

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

eine Datei in umgekehrter Reihenfolge in Python

Wenn Sie mit einer großen Datei arbeiten und ihren Inhalt von der letzten Zeile zum ersten, Pythons integrierten Funktionen lesen müssen, sind möglicherweise nicht geeignet. Hier ist eine effiziente Lösung, um diese Aufgabe anzugehen:

Reverse Line Reader Generator

Der folgende Code definiert eine Generatorfunktion, Reverse_readline, die die Zeilen einer Datei in umgekehrter Reihenfolge ergibt. Es verwendet einen pufferbasierten Ansatz, um die Leistung zu optimieren und große Dateien effektiv zu verarbeiten:

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()

useage:

, um diesen Generator zu verwenden, können Sie einfach in einem für Schleifen:

for line in reverse_readline('myfile.txt'):
    print(line)

Dies druckt die Zeilen der Datei in umgekehrter Reihenfolge.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3