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.
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