On Sat, Apr 27, 2002 at 12:24:46AM -0400, Tim Peters wrote: > [holger krekel] > > measured with your driver script the following code > > is about 10-20% faster than 'g2' and it gets close to > > > > > > Challenge 3: do it faster and with less code. > > > > def g3(filename, lineno): > > if lineno>0: > > f = file(filename) > > while lineno>0: > > read = f.read(1024) > > count = read.count('\n') > > lineno-=count or lineno > > f.close() > > if lineno<count: > > return read.split('\n')[lineno+count-1] > > return '' > > > > vertically it's one line less but it stretches > > a bit horizontally. But it is more portable :-) > > What if (the simplest example of what can go wrong) the first line is more > than 1024 characters long, and the caller asks for lineno 1? right. i noticed after sending it that you also need to change lineno-= count or lineno into lineno-= count or read and lineno and the problem of lines longer>1024 and around the 1024 boundary remains. Solving this probably blows the code by several lines. But anyway, isn't reading and counting still a faster technique than using readlines() esp. for larger files? holger
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4