Подсчет количества строк в файле несколько раз в Python - PullRequest
3 голосов
/ 07 мая 2020

Почему второй вызов:

num_lines = len(file.read().split("\n")) - 1

возвращает 0 вместо правильного значения?

with open("Data.txt", "r+") as file:
    num_lines = len(file.read().split("\n")) - 1
    print("Old num_lines: " + str(num_lines))

    # Add 10 new lines of data to end of the file
    for i in range(num_lines, num_lines + 10):
        file.write("{}, {}\n".format(i, random.randint(0, 10)))

    num_lines = len(file.read().split("\n")) - 1
    print("New num_lines: " + str(num_lines))

Ответы [ 3 ]

2 голосов
/ 07 мая 2020

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

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

Вместо повторного чтения файла я предлагаю сохранить исходное количество строк при первом чтении:

old_num_lines = num_lines = len(file.read().split("\n")) - 1

В любом случае, возвращаясь назад в начало файла тоже будет очень просто, с помощью метода seek():

file.seek(0)
1 голос
/ 07 мая 2020

Вы читаете файл один раз, вы не можете прочитать его снова, поиск достиг конца файла.

Вам нужно найти начало файла.

file.seek(0)

Перед повторной попыткой прочитать файл.


Кстати, вы не нет необходимости читать файл снова. Если вы добавляете 10 строк в файл в своем коде, новое количество строк будет:

num_lines += 10
0 голосов
/ 07 мая 2020

Вы открываете файл один раз (with open("Data.txt", "r+") as file). Вы читаете кучу материалов, которые меняют вашу текущую позицию в файле. Первая операция «чтения» устанавливает позицию в самом конце файла.

Затем вы пишете что-то, что продолжает перемещать текущую позицию в конец файла.

Наконец, вы делаете еще file.read(). Это означает «прочитать N байтов, начиная с текущей позиции в файле». Поскольку текущая позиция - это самый конец файла, вы ничего не читаете.

Более подробную информацию см. В официальной документации .

...