String Fomat Conversion

Steven Bethard steven.bethard at gmail.com
Fri Jan 28 00:26:57 CET 2005


enigma wrote:
> Do you really need to use the iter function here?  As far as I can
> tell, a file object is already an iterator.  The file object
> documentation says that, "[a] file object is its own iterator, for
> example iter(f) returns f (unless f is closed)."  It doesn't look like
> it makes a difference one way or the other, I'm just curious.

Nope, you're right -- that's just my obsessive-compulsive disorder 
kicking in. ;)  A lot of objects aren't their own iterators, so I tend 
to ask for an iterator with iter() when I know I want one.  But for 
files, this definitely isn't necessary:

py> file('temp.txt', 'w').write("""\
... x y
... 1 2
... 3 4
... 5 6
... """)
py> f = file('temp.txt')
py> f.next()
'x y\n'
py> for line in f:
...     print [float(f) for f in line.split()]
...
[1.0, 2.0]
[3.0, 4.0]
[5.0, 6.0]

And to illustrate Alex Martelli's point that using readline, etc. before 
using the file as an iterator is fine:

py> f = file('temp.txt')
py> f.readline()
'x y\n'
py> for line in f:
...     print [float(f) for f in line.split()]
...
[1.0, 2.0]
[3.0, 4.0]
[5.0, 6.0]

But using readline, etc. after using the file as an iterator is *not* 
fine, generally:

py> f = file('temp.txt')
py> f.next()
'x y\n'
py> f.readline()
''

In this case, if my understanding's right, the entire file contents have 
been read into the iterator buffer, so readline thinks the entire file's 
been read in and gives you '' to indicate this.

Steve



More information about the Python-list mailing list