Почему данные не сохраняются в файлы?

#подготовка
import os

file_all_marks_write = open("all_marks.txt", "w")
file_sum_write = open("sum.txt", "w")
file_mark_write = open("mark.txt", "w")

file_all_marks_read = open("all_marks.txt", "r")
file_sum_read = open("sum.txt", "r")
file_mark_read = open("mark.txt", "r")


all_marks = file_all_marks_read.read()
mark = file_mark_read.read()
str_summa = file_sum_read.read()

if str_summa == "":
    summa = 0
else:
    summa = int(file_sum_read.read())

#максимально возможная оцека и минимально возможная оценка
maximal = int(input('Введите максимально возможную оценку: '))
minimal = int(input('Введите минимально возможную оценку: '))


while True:
    #ввод новой оценки
    new_mark = int(input('Введите новую оценку: '))

    #соответствует ли оценка заданным ранее критериям
    if new_mark > maximal and new_mark < minimal:
        print('Error')
        break

    #обновление суммы всех оценок (для итоговой оценки)
    summa += new_mark

    #обновление файла, где хранятся все оценки
    all_marks += str(new_mark)
    all_marks += " "

    #подсчёт итоговой оценки
    mark = round(summa / (len(all_marks) / 2))

    #вывод всех оценок и итоговой оценки на экран
    print(all_marks)

    print('---')
    print(mark)

    #выход?
    q = input("Выйти (да / нет)? ")
    if q == "да":
        break

#передача данных в файлы
file_all_marks_write.write(all_marks)
file_sum_write.write(str(summa))
file_mark_write.write(str(mark))

#закрытие потоков
file_all_marks_write.close()
file_sum_write.close()
file_mark_write.close()

file_all_marks_read.close()
file_sum_read.close()
file_mark_read.close()

Ответы (2 шт):

Автор решения: Simon Osipov

Открыв файл на запись file_all_marks_write = open("all_marks.txt", "w") (w в данном случае значит write), вы "затерли" все, что там было, превратив его в пустой файл.

А потом пытаетесь его же открыть на чтение r.

Используйте управление контекстом:

with open("all_marks.txt", "r") as file:
    do_all_actions_with_file
→ Ссылка
Автор решения: passant

Ознакомтесь с тем, что такое и как работает "режим" открытия файла. (Например, вот первая же ссылка https://pythonworld.ru/tipy-dannyx-v-python/fajly-rabota-s-fajlami.html.) Тогда вы поймете, что вы несколько нарушили логику. Последовательность действий, которые вы выполняете должны быть следующими:

  • открытие файла в режиме дозаписи ("a") (или в режиме записи ("w"), но только если данные не должны сохраняться между сеансами);

  • запись в файл;

  • закрытие файла;

  • открытие файла в режиме чтения ("r")

  • чтение;

  • закрытие файла.

В случае острой необходимости, обратите внимание, что режим "чтения" и "записи" можно совместить. ("w+" и "r+"). Однако пока вы твердо не разберетесь с логикой действий с файлами, я бы не рекомендовал вам эту возможность использовать.

→ Ссылка