#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. Опубликуйте, что данные появятся. Вы могли бы попробовать реструктурировать свою программу.