Здесь:
while line != '':
line = test_results_file.readline()
Когда вы дойдете до конца файла, .readline()
возвращает пустую строку, но поскольку это происходит после теста while line != ''
, вы все равнопопробуйте обработать эту строку.
Канонический (и гораздо более простой) способ итерации по файлу строка за строкой, который, ну, в общем, итерация по файлу, позволит избежать этой проблемы:
for line in test_result_file:
do_something_with(line)
Вам просто нужно позаботиться о вызове .rstrip()
на line
, если вы хотите избавиться от завершающего символа новой строки (как в случае с вашим кодом).
Также,Вы хотите убедиться, что файл правильно закрыт, что бы ни случилось.Каноническим способом является использование open()
в качестве диспетчера контекста:
with open("path/to/file.txt") as f:
for line in test_result_file:
do_something_with(line)
Это вызовет f.close()
при выходе из блока with
, однако он завершается (независимо от того, завершился ли цикл for или является исключением).случилось).
Кроме того, вместо того, чтобы делать сложные вычисления, чтобы найти деталь после канала, вы можете просто разбить вашу строку:
for line in test_results_file:
total = int(line.strip().split("|")[1])
num_recs += 1
И, наконец, вы можете использовать * 1028 stdlib's* модуль для анализа вашего файла вместо того, чтобы делать это вручную ...