seek operation in python
Cecil at decebal.nl
Thu Apr 30 11:06:10 CEST 2015
Op Thursday 30 Apr 2015 10:31 CEST schreef Dave Angel:
> On 04/30/2015 04:06 AM, Cecil Westerhof wrote:
>> Op Thursday 30 Apr 2015 09:33 CEST schreef Chris Angelico:
>>> On Thu, Apr 30, 2015 at 4:27 PM, Cecil Westerhof <Cecil at decebal.nl> wrote:
>>>>> with open("input.cpp") as f:
>>>>> lines = f.readlines()
>>>> Is the following not better:
>>>> print(open('input.cpp', 'r').readlines())
>>>> Time is the same (about 25 seconds for 100.000 calls), but I find
>>>> this more clear.
>>> The significant difference is that the 'with' block guarantees to
>>> close the file promptly. With CPython it probably won't make a lot
>>> of difference, and in a tiny script it won't do much either, but
>>> if you do this on Jython or IronPython or MicroPython or some
>>> other implementation, it may well make a gigantic difference -
>>> your loop might actually fail because the file's still open.
>> I thought that in this case the file was also closed. But if that
>> is not the case I should think about this when I switch to another
>> version as CPython.
>> I wrote a module where I have:
>> def get_indexed_message(message_filename, index):
>> Get index message from a file, where 0 gets the first message
>> return open(expanduser(message_filename),
>> But this can be used by others also and they could be using Jython
>> or another implementation. So should I rewrite this and other
>> functions? Or would it be OK because the open is in a function?
> No, it's not going to close the file just because the open is in a
> function. The "with" construct was designed to help solve exactly
> this problem. Please use it.
I already done it. I thought it not to much work. And it even makes
some code shorter:
- marshal_file = open(expanduser(marshal_filename), 'r')
- not_list = load(marshal_file)
- return not_list
+ with open(expanduser(marshal_filename), 'r') as f:
+ return load(f)
But here I did the close myself already, so that is not completely
honest of me. ;-)
I should spend some time to make my code more consistent.
Senior Software Engineer
More information about the Python-list