Почему результат неверен, используя python, чтобы узнать номера строк файла

Я хочу знать номера строк определенного файла. Ниже приведен код

Но результат неверный: Истинный номер строки файла == Номер результата консоли + 1

проблема в "open().readlines()"?

если в последней строке есть содержимое, результат правильный

import os
import os.path

absPath = os.curdir

while True:  
    print '\nplease select the file you want to know the line nums:'
    print os.listdir(absPath)    

    fileName = raw_input()

    absFilePath = absPath + '//' + fileName
    if os.path.isfile(absFilePath):
        count = len(open(absFilePath).readlines())
        print 'the ' + fileName + ' file line nums is>>>' + str(count) + '>>>'
    else:
        print 'Please check the fileName or the input is not a file'

person Sam    schedule 06.03.2014    source источник
comment
Можете показать этот файл? Кроме того, попробуйте опубликовать минимальный пример, который воспроизводит этот результат.   -  person Jayanth Koushik    schedule 06.03.2014
comment
Я попробовал ваш код, и он вернул то же значение, что и wc -l. Как вы пытаетесь проверить свой код?   -  person Sedrik    schedule 06.03.2014
comment
Я бы просто использовал len(open('file.txt').read().splitlines())   -  person sashoalm    schedule 06.03.2014
comment
Файл, который вы проверяете, заканчивается новой строкой? Если да, то следует ли считать пустую последнюю строку или нет?   -  person Blckknght    schedule 06.03.2014
comment
Я нахожу причину: номер строки notepad++ (слева) показывает 6, но open().readlines() возвращает список ['aaa\n','bbb\n','ccc\n','\n', '\n'] '\n' добавит новый номер строки, но не добавит номер списка   -  person Sam    schedule 06.03.2014


Ответы (2)


Вы не должны использовать здесь readlines(), так как это излишне загружает весь файл в память. Следующий фрагмент более удобен для памяти:

with open(filename) as f:
    line_count = sum(1 for line in f)
person Brave Sir Robin    schedule 06.03.2014

Я нахожу причину: номер строки notepad++ (слева) показывает 6, но open().readlines() возвращает список ['aaa\n','bbb\n','ccc\n','\n', '\п']

'\n' добавит новый номер строки в редакторе, но не добавит номер списка

Итак, если последняя строка похожа на «bbb», сценарий правильный, если последняя строка похожа на «\n», «\n», номер строки должен добавить 1

person Sam    schedule 06.03.2014