Created
February 13, 2013 03:30
-
-
Save drewfradette/4942025 to your computer and use it in GitHub Desktop.
Python - recreate head/tail functionality
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
def head(filename, count=1): | |
""" | |
This one is fairly trivial to implement but it is here for completeness. | |
""" | |
with open(filename, 'r') as f: | |
lines = [f.readline() for line in xrange(1, count+1)] | |
return filter(len, lines) | |
def tail(filename, count=1, offset=1024): | |
""" | |
A more efficent way of getting the last few lines of a file. | |
Depending on the length of your lines, you will want to modify offset | |
to get better performance. | |
""" | |
f_size = os.stat(filename).st_size | |
if f_size == 0: | |
return [] | |
with open(filename, 'r') as f: | |
if f_size <= offset: | |
offset = int(f_size / 2) | |
while True: | |
seek_to = min(f_size - offset, 0) | |
f.seek(seek_to) | |
lines = f.readlines() | |
# Empty file | |
if seek_to <= 0 and len(lines) == 0: | |
return [] | |
# count is larger than lines in file | |
if seek_to == 0 and len(lines) < count: | |
return lines | |
# Standard case | |
if len(lines) >= (count + 1): | |
return lines[count * -1:] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment