Frankie Ribery
Frankie Ribery

Reputation: 12153

When processing a file, how do I obtain the current line number?

When I am looping over a file using the construct below, I also want the current line number.

    with codecs.open(filename, 'rb', 'utf8' ) as f:
        retval = []
        for line in f:
            process(line)

Does something akin to this exist ?

    for line, lineno in f:

Upvotes: 9

Views: 6365

Answers (2)

kindall
kindall

Reputation: 184101

for lineno, line in enumerate(f, start=1):

If you are stuck on a version of Python that doesn't allow you to set the starting number for enumerate (this feature was added in Python 2.6), and you want to use this feature, the best solution is probably to provide an implementation that does, rather than adjusting the index returned by the built-in function. Here is such an implementation.

def enumerate(iterable, start=0):
    for item in iterable:
        yield start, item
        start += 1

Upvotes: 10

John La Rooy
John La Rooy

Reputation: 304137

If you are using Python2.6+, kindall's answer covers it

Python2.5 and earlier don't support the second argument to enumertate, so you need to use something like this

for i, line in enumerate(f):
    lineno = i+1

or

for lineno, line in ((i+1,j) for i,j in enumerate(f)):

Unless you are ok with the first line being number 0

Upvotes: 1

Related Questions