Python - Почему мои строки пропускают цикл for и не достигают конца файла? - PullRequest
0 голосов
/ 04 апреля 2019

Я пишу простую функцию, которая берет путь текстового файла и возвращает количество строк, содержащихся в этом файле.

Я удостоверился, что установил указатель файла на начало, используя file.seek (0).

def get_number_lines(file_dir):

    exists = os.path.isfile(file_dir) 
    if (exists):
        print(file_dir)
        line_count = 0
        read_file  = open(file_dir,'r')
        read_file.seek(0)
        for line_num, line in enumerate(read_file.readlines()):
            line_count = line_num
            print(line)
        read_file.close()

        return (line_count + 1)
    else:
        print("ERROR: FILE \"" + file_dir + "\" does not exist.")
        exit()

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

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Я проверил приведенный ниже код, используя «с открытым» вместо read_file.seek.

Личное мнение, но оно работает намного лучше для чтения .txt файлов. Функция вернет количество строк, найденных в пути, указанном для функции. Если это не файл, который существует, он выдаст ошибку и завершится.

def Get_Number_Lines(file_dir):
    exists = os.path.isfile(file_dir) 
    if (exists):
        print(file_dir)
        line_count = 0

        with open(file_dir, 'rb') as fin:

            reader = fin.readlines()

            for line in reader:
                line_count += 1

        return line_count

    else:
        print("ERROR: FILE \"" + file_dir + "\" does not exist.")
        exit()
0 голосов
/ 04 апреля 2019

Ценю все предложения. Итак, я обнаружил, что у меня был файловый объект (в режиме записи), открытый до вызова функции get_number_lines (), т.е.

write_file = open(outputFileDir,"w+")
    # do stuff
get_number_lines(outputFileDir)

Затем я попытался закрыть файл перед вызовом функции, которая решила проблему, с которой я столкнулся. Из любопытства я тоже попробовал, что без проблем работает:

write_file = open(outputFileDir,"w+")
    # do stuff
write_file.close()
read_file.open(outputFileDir,"r")
get_number_lines(outputFileDir)

Я не осознавал, что наличие двух файловых объектов (один для чтения и один для записи) может вызвать эту проблему.

...