[Tutor] Compute data usage from log
bibi midi
bibsmendez at gmail.com
Mon Oct 26 14:25:12 CET 2009
On Mon, Oct 26, 2009 at 2:12 PM, Luke Paireepinart
<rabidpoobear at gmail.com>wrote:
>
>
> On Mon, Oct 26, 2009 at 3:20 AM, Christian Witts <cwitts at compuscan.co.za>wrote:
>
>> fInput = open('/path/to/log.file', 'rb')
>> total_usage = 0
>> for line in fInput:
>> total_usage += int(line.split(' ')[9].strip())
>> print total_usage
>>
>
> It's actually bad to assign a variable to the file object in this case
> (flinput = ....) because Python will automatically close a file after you're
> done with it if you iterate over it directly, but if you include a reference
> it will stay open until the python program ends or you explicitly call
> flinput.close(). It doesn't matter much in this example but in general it
> is good practice to either
> 1) call foo.close() immediately after you're done using a file object, or
> 2) don't alias the file object and just over it directly so Python will
> auto-close it.
>
> Therefore a better (and simpler) way to do the above would be:
>
> total_usage = 0
> for line in open('/path/to/log.file'):
> total_usage += int(line.split(' ')[9])
>
Hi Luke,
Your modification seems cleaner, you called the open function directly in
the for loop.
>
> Also note you don't need to strip the input because int() coersion ignores
> whitespace anyway. And additionally you shouldn't be opening this in binary
> mode unless you're sure you want to, and I'm guessing the log file is ascii
> so there's no need for the 'rb'. (reading is default so we don't specify an
> 'r'.)
>
The file is normal ascii text. Ii open it with no mode set, and that
defaults to read-only.
>
> And since I like list comprehensions a lot, I'd probably do it like this
> instead:
>
> total_usage = sum([int(line.split(' ')[9]) for line in
> open('/path/to/log.file')])
>
> Which incidentally is even shorter, but may be less readable if you don't
> use list comprehensions often.
>
> Also, the list comprehension version is likely to be more efficient, both
> because of the use of sum rather than repeated addition (sum is implemented
> in C) and because list comprehensions in general are a tad faster than
> explicit iteration, if i recall correctly (don't hold me to that though, I
> may be wrong.)
>
I have read up on list comprehension and I seem to understand it's basics. I
will play around with the different solutions on hand.
>
>> Of course this has no error checking and or niceties, but I will leave
>> that up to you.
>
> The same applies to my modifications.
>
> Good luck, and let us know if you need anything else!
>
> -Luke
>
Thank you as always :-)
--
Best Regards,
bibimidi
Sent from Riyadh, 01, Saudi Arabia
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20091026/2bdcde1f/attachment.htm>
More information about the Tutor
mailing list