Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich mit Python eine große Textdatei effizient in umgekehrter Reihenfolge lesen?
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!