Как получить текущий номер строки при обработке файла? - PullRequest
9 голосов
/ 10 мая 2011

Когда я зацикливаюсь на файле с помощью приведенной ниже конструкции, мне также нужен текущий номер строки.

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

Существует ли что-то похожее на это?

    for line, lineno in f:

Ответы [ 2 ]

10 голосов
/ 10 мая 2011
for lineno, line in enumerate(f, start=1):

Если вы застряли на версии Python, которая не позволяет установить начальный номер для enumerate (эта функция была добавлена ​​в Python 2.6), и вы хотите использовать эту функцию, вероятно, лучшим решением обеспечить реализацию, которая вместо корректировки индекса, возвращаемого встроенной функцией. Вот такая реализация.

def enumerate(iterable, start=0):
    for item in iterable:
        yield start, item
        start += 1
1 голос
/ 10 мая 2011

Если вы используете Python2.6 +, ответ kindall охватывает это

Python2.5 и более ранние версии не поддерживают второй аргумент для перечисления, поэтому вам нужно использовать что-то вроде этого

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

или

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

Если вы не согласны с первой строкой с номером 0

...