Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

readlines with line number support?

0 views
Skip to first unread message

Nikhil

unread,
May 14, 2008, 2:25:51 PM5/14/08
to
Hi,

I am reading a file with readlines method of the filepointer object
returned by the open function. Along with reading the lines, I also need
to know which line number of the file is read in the loop everytime.
I am sure, the line should have the property/attribute which will say
the line number of the file.

If there is none, do I have to end up using the counter in the loop?

fp = open("file", "r")
lineno = 0
for line in fp.readlines():
print "line number: " + lineno + ": " + line.rstrip()
lineno = lineno + 1

--

Thanks,
Nikhil

Paul McNett

unread,
May 14, 2008, 2:42:27 PM5/14/08
to Nikhil, pytho...@python.org

Untested:

for lineno, line in enumerate(open("file")):
print "line number: %s : %s" % (idx, line.rstrip())

Note the other stylistic changes, too.


HTH.
Paul

Arnaud Delobelle

unread,
May 14, 2008, 2:45:26 PM5/14/08
to
Nikhil <mni...@gmail.com> writes:

The standard Python way is using enumerate()

for i, line in enumerate(fp):


print "line number: " + lineno + ": " + line.rstrip()

--
Arnaud

Nikhil

unread,
May 14, 2008, 2:52:35 PM5/14/08
to
Oh I did not know enumerate can be used. Thanks Paul and Arnaud.
I will try this.

Nikhil

unread,
May 14, 2008, 2:52:53 PM5/14/08
to

Nikhil

unread,
May 14, 2008, 2:54:20 PM5/14/08
to
Arnaud Delobelle wrote:

> The standard Python way is using enumerate()
>
> for i, line in enumerate(fp):
> print "line number: " + lineno + ": " + line.rstrip()
>

I guess you meant to say :

for lineno, line in enumerate(fp):


print "line number: " + lineno + ": " + line.rstrip()

Thanks.

Arnaud Delobelle

unread,
May 14, 2008, 3:20:44 PM5/14/08
to
Nikhil <mni...@gmail.com> writes:

Yes!

--
Arnaud

pyt...@bdurham.com

unread,
May 14, 2008, 4:10:24 PM5/14/08
to pytho...@python.org, Arnaud Delobelle
Arnaud,

>> Is there any way to have enumerate() start at 1 vs. 0?
>>
>> The problem with starting at 0 is that many things in the real world
>> begin at 1 - like line numbers or labels in a list.

> I suppose you could redefine enumerate to support an optional argument:
>
> from itertools import izip, count
>
> def enumerate(iterable, start=0):
> return izip(count(start), iterable)
>
> >>> list(enumerate('spam', 1))
> [(1, 's'), (2, 'p'), (3, 'a'), (4, 'm')]

Brilliant!!

Thank you,
Malcolm

0 new messages