[Python-bugs-list] [ python-Bugs-645594 ] for lin in file: file.tell() tells wrong

noreply@sourceforge.net noreply@sourceforge.net
Fri, 29 Nov 2002 08:57:36 -0800


Bugs item #645594, was opened at 2002-11-29 04:13
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=645594&group_id=5470

Category: Python Library
Group: Python 2.2.2
Status: Open
Resolution: None
Priority: 5
Submitted By: Dmitry Vasiliev (hdima)
Assigned to: Nobody/Anonymous (nobody)
Summary: for lin in file: file.tell() tells wrong

Initial Comment:
Consider following piece of code:

f = file("test.txt", "rb")
pos = f.tell()
for line in f:
	print "%u: '%s'" % (pos, line)
	pos = f.tell()

During the code execution we have following result:

0 'Line 1'
63 'Line 2'
63 'Line 3'
...
63 'Line 9'

However, following piece of code works fine:

f = file("test.txt", "rb")
while True:
	pos = f.tell()
	line = f.readline()
	if line == "":
		break
	print "%u: '%s'" % (pos, line)

It prints:

0 'Line 1'
7 'Line 2'
14 'Line 3'
...
56 'Line 9'

It seems a file iterator makes file.tell() to tell
positions of some internal blocks used by the iterator.

----------------------------------------------------------------------

>Comment By: Tim Peters (tim_one)
Date: 2002-11-29 11:57

Message:
Logged In: YES 
user_id=31435

Possibly.  Maybe something fancier could be done too, to 
give "expected" results. although I don't know how to 
approach that on Windows for text-mode files (byte 
arithmetic on seek/tell results doesn't work at all for 
those).  I'd take it to Python-Dev.

----------------------------------------------------------------------

Comment By: Martin v. L÷wis (loewis)
Date: 2002-11-29 11:01

Message:
Logged In: YES 
user_id=21627

Shouldn't tell raise an exception then?

----------------------------------------------------------------------

Comment By: Tim Peters (tim_one)
Date: 2002-11-29 10:42

Message:
Logged In: YES 
user_id=31435

"for x in file" does do its own chunking under the covers, for 
speed, and seek() and tell() are indeed not to be used on a 
file being iterated over in this way.

----------------------------------------------------------------------

Comment By: Dmitry Vasiliev (hdima)
Date: 2002-11-29 09:46

Message:
Logged In: YES 
user_id=388573

I'll try to dig in.

----------------------------------------------------------------------

Comment By: Martin v. L÷wis (loewis)
Date: 2002-11-29 09:30

Message:
Logged In: YES 
user_id=21627

Would you like to investigate this further? There is no need 
to, but if you find a solution and a patch, there is a better 
chance that this is fixed before 2.3.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=645594&group_id=5470