Is reverse reading possible?
Jeff Epler
jepler at unpythonic.net
Sun Mar 14 13:01:05 EST 2004
on seekable, byte-oriented binary files, sure.
import errno
SEEK_SET, SEEK_CUR, SEEK_END = range(3)
class Reversed:
def __init__(self, f):
self.f = f
self.f.seek(-1, SEEK_END)
self.at_eof = 0
def read_byte(self):
if self.at_eof: return ''
byte = self.f.read(1)
try:
self.f.seek(-2, SEEK_CUR)
except IOError, detail:
if detail.errno == errno.EINVAL:
self.at_eof = 1
else:
raise
return byte
def __iter__(self): return self
def next(self):
r = self.read_byte()
if r == '': raise StopIteration
return r
>>> "".join(Reversed(file("/etc/redhat-release", "rb")))
'\n)worraY( 1 esaeler eroC arodeF'
Jeff
More information about the Python-list
mailing list