Top.Mail.Ru
Ответы

Мгновенная запись в файл в python

while True:
with open('file.txt', 'w+') as file:
file.write(input('Please enter a string: '))
file.seek (0)
print(file.readline())
file.flush()
Вот пример кода. Даже с использованием file.flush() данные записываются только при завершении программы. Как записывать их при окончании блока with open?

По дате
По рейтингу
Аватар пользователя
Ученик
7мес

Проблема заключается в том, что блок with open(...) as file: автоматически закрывает файл после своего завершения, тем самым сбрасывая все изменения на диск. Однако вызов flush() вне контекста менеджера контекста не имеет смысла, так как файл уже закрыт.

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

Вот исправленный вариант вашего кода:


while True:
with open('file.txt', 'w+') as file:
user_input = input('Please enter a string: ')
file.write(user_input + '\n')
# flush() сбрасывает буфер на диск
file.flush()
# Перемещаемся обратно в начало файла для чтения
file.seek (0)
print( file.read ())
Что изменилось?
Метод flush() вызывается внутри блока with, чтобы гарантировать сброс содержимого буфера на диск до закрытия файла.
Добавлен переход курсора в начало файла с помощью seek(0) перед чтением содержимого.
Читается всё содержимое файла с помощью read(), а не только одна строка, как было раньше.
Теперь ваш код должен работать корректно, и данные будут записываться и читаться сразу после ввода пользователем строки.

Аватар пользователя
Мудрец
7мес

Код:

123456789101112
 while True: 
    with open('file.txt', 'a+') as file:  # Открываем файл в режиме добавления и чтения 
        user_input = input('Пожалуйста, введите строку (для выхода введите "exit"): ') 
         
        if user_input.lower() == 'exit':  # Проверяем, хочет ли пользователь выйти 
            print("Программа завершена.") 
            break 
         
        file.write(user_input + '\n')  # Добавляем новую строку с введенным пользователем текстом 
        file.seek(0)  # Переходим к началу файла для чтения всего содержимого 
        print(file.read())  # Читаем и выводим все строки из файла