Eine Datei in umgekehrter Reihenfolge in Python lesen
Wenn Sie mit einer großen Datei arbeiten und deren Inhalt von der letzten Datei lesen müssen In der ersten Zeile sind die in Python integrierten Funktionen möglicherweise nicht geeignet. Hier ist eine effiziente Lösung, um diese Aufgabe zu bewältigen:
Reverse Line Reader Generator
Der folgende Code definiert eine Generatorfunktion, reverse_readline, die die Zeilen einer Datei in umgekehrter Reihenfolge liefert Befehl. 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()
Verwendung:
Um diesen Generator zu verwenden, können Sie einfach darüber iterieren in einer for-Schleife:
for line in reverse_readline('myfile.txt'): print(line)
Dadurch werden die Zeilen der Datei in umgekehrter Reihenfolge gedruckt.
Das obige ist der detaillierte Inhalt vonWie kann ich mit Python eine große Datei effizient in umgekehrter Reihenfolge lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!