Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Савелий Лодкин Лодкин Ученик (98), открыт 1 неделю назад
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?
2 ответа
Егор Губин Ученик (122) 1 неделю назад
Проблема заключается в том, что блок 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(), а не только одна строка, как было раньше.
Теперь ваш код должен работать корректно, и данные будут записываться и читаться сразу после ввода пользователем строки.
Вертолётов 625 Мудрец (13288) 1 неделю назад
Код:
 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()) # Читаем и выводим все строки из файла
Похожие вопросы