Skip to content

Instantly share code, notes, and snippets.

@guixing
Created August 25, 2013 02:32
Show Gist options
  • Save guixing/6331602 to your computer and use it in GitHub Desktop.
Save guixing/6331602 to your computer and use it in GitHub Desktop.
import re
import sys
import os
def filerev(somefile, buffer=256):
somefile.seek(0, os.SEEK_END)
size = somefile.tell()
lines = ['']
rem = size % buffer
pos = max(0, (size // buffer - 1) * buffer)
while pos >= 0:
somefile.seek(pos, os.SEEK_SET)
data = somefile.read(rem + buffer) + lines[0]
rem = 0
pos -= buffer
lines = re.findall(r'[^\n]*\n?', data)
ix = len(lines) - 2
while ix > 0:
yield lines[ix]
ix -= 1
else:
yield lines[0]
with open(sys.argv[1], 'r') as f:
for line in filerev(f):
sys.stdout.write(line)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment