diff options
author | krebs <krebs@fuerkrebs> | 2011-11-04 12:40:43 -0400 |
---|---|---|
committer | krebs <krebs@fuerkrebs> | 2011-11-04 12:40:43 -0400 |
commit | 5876c5a411e77b6518148712abc0c5d5bd45049e (patch) | |
tree | fa22c7129266efb4ce9a322976d4d2b4f9097f5e /retiolum/scripts/adv_graphgen/BackwardsReader.py | |
parent | c74c87e070eadac2acede8a416e7a0df90beb2df (diff) | |
parent | 71698721b593f9857038c35e3ca9c84e2aba4aff (diff) |
Merge branch 'master' of github.com:krebscode/painload
Diffstat (limited to 'retiolum/scripts/adv_graphgen/BackwardsReader.py')
-rw-r--r-- | retiolum/scripts/adv_graphgen/BackwardsReader.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/retiolum/scripts/adv_graphgen/BackwardsReader.py b/retiolum/scripts/adv_graphgen/BackwardsReader.py new file mode 100644 index 00000000..6bdbf43c --- /dev/null +++ b/retiolum/scripts/adv_graphgen/BackwardsReader.py @@ -0,0 +1,35 @@ +import sys +import os +import string + +class BackwardsReader: + """ Stripped and stolen from : http://code.activestate.com/recipes/120686-read-a-text-file-backwards/ """ + def readline(self): + while len(self.data) == 1 and ((self.blkcount * self.blksize) < self.size): + self.blkcount = self.blkcount + 1 + line = self.data[0] + try: + self.f.seek(-self.blksize * self.blkcount, 2) + self.data = string.split(self.f.read(self.blksize) + line, '\n') + except IOError: + self.f.seek(0) + self.data = string.split(self.f.read(self.size - (self.blksize * (self.blkcount-1))) + line, '\n') + + if len(self.data) == 0: + return "" + + line = self.data[-1] + self.data = self.data[:-1] + return line + '\n' + + def __init__(self, file, blksize=4096): + """initialize the internal structures""" + self.size = os.stat(file)[6] + self.blksize = blksize + self.blkcount = 1 + self.f = open(file, 'rb') + if self.size > self.blksize: + self.f.seek(-self.blksize * self.blkcount, 2) + self.data = string.split(self.f.read(self.blksize), '\n') + if not self.data[-1]: + self.data = self.data[:-1] |