> def shift(f, offset, size, buffer_size=1024*1024):

Slight bug in that function implementation.  This one passes my 
tests.

Sorry about that.

-tkc


def shift(f, offset, size, buffer_size=1024*1024):
        """deletes (in place) a portion of size "size" from file "f", 
starting at offset "offset"

The buffer_size can be tweaked for system preferences,
defaulting to 1 megabyte.
"""

        f.seek(offset + size)
        while True:
                buffer = f.read(buffer_size)
                if not buffer: break
                f.seek(offset)
                f.write(buffer)
                offset += buffer_size
                f.seek(offset + size)
        f.seek(-size,2)
        f.truncate()

if __name__ == '__main__':
        offset = ord('p')
        size = 5
        buffer_size = 10

        from StringIO import StringIO
        s = ''.join([chr(i) for i in xrange(256)])
        print repr(s)
        print "="*50
        f = StringIO(s)
        # delete "p" through "u"
        shift(f, offset, size, buffer_size)
        f.seek(0)
        result = f.read()
        print repr(result)





-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to