newbie: Some file object tips?
Gustavo Cordova
gcordova at hebmex.com
Tue Feb 19 10:37:22 EST 2002
>
> So does this command ....
>
> > lines = open("log.txt").readlines()
>
> ... actually load the whole log into RAM.
>
Yes it does.
But then, what's actually flawed is the algorithm,
not the program, or the tools.
You need a new way to store the message which will
let you read only part of the log into memory.
Right?
Well, sorry. Maybe "flawed" is a too harsh qualification,
but overly simple. Ok.
Hmmm... What would I do?
I wouldn't read the "last 'n' lines", as you put it,
but something easier to calculate, "the last 'n' K of text",
which is more "file-like".
So, to read the lines in the last "n" Kb of text:
====== SOME CODE ======
def GetLog(filename, maxSize=None):
log = open(filename)
if maxSize:
# Seek to end of file.
log.seek(0,2)
# Obtain current position index.
fileLen = log.tell()
# If file is larger than maxSize,
# seek to (EOF - maxSize).
if maxSize < fileLen:
log.seek(fileLen-maxSize)
# Skip one line.
log.readline()
# Or return to the file beginning.
else:
log.seek(0)
# Return all lines.
return log.readlines()
====== SOME CODE ======
So now you only get the last maxSize Kb lines-worth of
lines from the log file.
Maybe it's a little clumsy, I bet someone can clean it
up a bit.
Good luck :-)
-gustavo
More information about the Python-list
mailing list