import mmap with open("data.bin", "r+") as f: m = mmap.mmap(f.fileno(), 0) pos = m.rfind( "\n" )
Michail_VТак вы приведите свой код.
всё-равно выжирает оперативу
Michail_VНаучите каким образом вы это так понимаете. http://docs.python.org/2/library/mmap.html
насколько я понимаю
f=open("some_file.dat","r")
def reverse_readlines(path, BLOCK_SIZE=4096): with open(path, "rb") as f: bfr = b"" f.seek(-1, 2) while True: pos = f.tell() newline_pos = bfr.rfind(b"\n") while -1 != newline_pos: line, bfr = bfr[newline_pos+1:], bfr[:newline_pos] yield line newline_pos = bfr.rfind(b"\n") else: if pos: toread = min(BLOCK_SIZE, pos) f.seek(-toread, 1) bfr = f.read(toread) + bfr f.seek(-toread, 1) if pos == toread: bfr = b"\n" + bfr else: raise StopIteration()