Lecture d'un fichier dans l'ordre inverse en Python
Lorsque le besoin se fait sentir de traiter les données de la fin d'un fichier, il devient nécessaire de lire un fichier dans l'ordre inverse. En Python, cela peut être réalisé efficacement en utilisant une approche basée sur un générateur.
Générateur pour la lecture de ligne inversée
Le générateur Python suivant, reverse_readline, permet d'itérer sur le lignes d'un fichier à l'envers order:
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()
Utilisation
Pour utiliser le générateur reverse_readline, ouvrez un fichier en lecture en mode binaire et parcourez les lignes dans l'ordre inverse :
with open('input.txt', 'rb') as input_file: for line in reverse_readline(input_file): # Process line in reverse order
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!