Текстовый файл Python обновляется только при завершении работы программы

#python #text-files

#python #текстовые файлы

Вопрос:

У меня есть функция, которая запрашивает ввод от пользователя, а затем записывает его в файл. Однако во время работы программы он не отображается в текстовом файле. Это означает, что когда я пытаюсь прочитать свой текстовый файл, он пуст. Если я завершаю работу своей программы, весь написанный текст отображается в текстовом файле.

У меня есть основная функция, в которой вы выбираете чтение, запись или редактирование блокнота. После выбора чего-либо основная функция вызывает другую функцию. Я не уверен, что это правильная структура для использования в данном случае или это плохо в целом. Надеюсь, это имеет смысл.

 def new_note():
    file = open('notepad.dat', 'a')
    file.writelines('n'   input("Write something: "))
    file.writelines(":::"   time.strftime("%X %x"))
    file.close
    main()


def read_file():
    file = open('notepad.dat', 'r')
    notes = [(line.strip()).split() for line in file]
    print(notes)
    file.close
    main()

  

Комментарии:

1. На самом деле вы не закрываете файл — для вызова метода вам нужны скобки — file.close()

2. Вам гарантируется только то, что после закрытия файла все будет записано. Это происходит из-за буфера записи в файл. Если вы хотите немедленно выполнить запись в файл, вы можете использовать file.flush() это приведет к немедленному удалению буфера из файла, даже если вы его не закрывали

3. Как ни странно, я совершенно забыл эти скобки. Теперь все работает!

Ответ №1:

Попробуйте это, это больше похоже на pythonic:

 def new_note():
    with open('notepad.dat', 'a') as file:
        file.writelines('n'   input("Write something: "))
        file.writelines(":::"   time.strftime("%X %x"))
    
    main()


def read_file():
    with open('notepad.dat', 'r') as file:
        notes = [(line.strip()).split() for line in file]
        print(notes)       
    
     main()
  

Однако было бы полезно, если бы вы предоставили общий доступ к main функции.
Из того, что я пробовал в своей локальной системе, вышеприведенное, похоже, не вызвало никаких проблем при пропуске main() вызова.

Комментарии:

1. Это здорово, я забыл скобки из file.close() , но, похоже, with open('notepad.dat', 'a') as file: файл также закрывается автоматически!

2. да, использование with обо всем позаботится за вас 🙂

Ответ №2:

Проблема здесь в том, что вы не сможете прочитать свой файл, одновременно пытаясь выполнить в него запись. Кроме того, файлы будут обновлены после вызова file.close. Опубликуйте, что данные появятся. Вы могли бы попробовать реструктурировать свою программу.