How to change a generator ?

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Wed Dec 24 12:37:53 EST 2008


En Wed, 24 Dec 2008 15:03:58 -0200, MRAB <google at mrabarnett.plus.com>  
escribió:

>>  I have a generator whose aim is to returns consecutive lines from a  
>> file (the listing below is a simplified version).
>> However, as it is written now, the generator method changes the text  
>> file pointer to end of file after first invocation.
>> Namely, the file pointer changes from 0 to 6623 on line 24.
>>
> It might be that the generator method of self.input_file is reading the  
> file a chunk at a time for efficiency even though it's yielding a line  
> at a time.

I think this is the case too.
I can think of 3 alternatives:

a) open the file unbuffered (bufsize=0). But I think this would greatly  
decrease performance.

b) keep track internally of file position (by adding each line length).  
The file should be opened in binary mode in this case (to avoid any '\n'  
translation).

c) return line numbers only, instead of file positions. Seeking to a  
certain line number requires to re-read the whole file from start;  
depending on how often this is required, and how big is the file, this  
might be acceptable.

-- 
Gabriel Genellina




More information about the Python-list mailing list