Membaca Fail dalam Susunan Terbalik Menggunakan Python
Andaikan anda mempunyai fail teks yang panjang dan keinginan untuk membaca kandungannya dari baris akhir hingga baris awal. Bagaimanakah anda boleh mencapai ini dalam Python?
Jawapan:
Fungsi penjana Python berikut dengan berkesan membaca fail dalam susunan terbalik:
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()
Fungsi penjana ini mempamerkan prestasi cekap memori dan sesuai untuk fail besar. Ia membahagikan fail kepada ketulan yang boleh diurus dan memprosesnya ke belakang baris demi baris.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membaca Fail Teks Besar dengan Cekap dalam Susunan Terbalik Menggunakan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!