Member 13226553 Ответов: 1

Проблема обработки файлов/проблема внешнего файла (новичок)


Только что начал курс питона. Упражнение состоит в том, чтобы позволить пользователю выбрать, что делать с файлом под названием nootebook.
1.читать содержание
2. добавление контента
3.удалять контент
4. Завершение программы

Если пользователь выбирает (1), он должен распечатать содержимое, но не делает этого.


# -*- coding: cp1252 -*-


alt_1 = open("notebook.txt","r")
alt_2 = open("notebook.txt","a")
alt_3 = open("notebook.txt","w")

while True:
	print("\
\n(1) Read the notebook\
\n(2) Add note\
\n(3) Empty the notebook\
\n(4) Quit")
	
	choice = int(input("\nPlease select one :"))

	if choice == 1:
		alt_1.seek(0)
		text = alt_1.read()
		print(text)
		alt_1.close
		continue
	
	elif choice == 2:
		addedtext = input("Write a new note: ")
		alt_2.write(addedtext)
		alt_2.close
		continue
	
	elif choice == 3:
		alt_3.write("")
		alt_3.close
		continue
	
	elif choice == 4:
		print("Notebook shutting down, thank you.")
		break
	
	else: 
		print("incorrect selection")
		continue


Что я уже пробовал:

попробовал запустить онлайн-компилятор, где код, казалось, добавлял добавленный текст из Варианта 2 после завершения программы. Не во время раздела "пока". Это как-то связано с этим ?

1 Ответов

Рейтинг:
5

Thomas Daniels

Проблема в том, что вы открываете 3 файловых потока одновременно. Вместо этого откройте файловый поток в вашем if блоки.

Кроме того, ваш .close линии ничего не делают, потому что функция не вызывается; вы должны это сделать .close().

Самый чистый способ открывать и закрывать файлы в Python - это использовать with заявление, тогда вам не нужно звонить close себя. Вот пример для choice == 1, вы можете сделать другие сами:

if choice == 1:
	with open("notebook.txt", "r") as f:
		text = f.read()
		print(text)
Вам также не нужно "продолжать" здесь, потому что все elifs будет пропущен, и после всех ifs и elifs кода не будет, так что продолжение уже произойдет автоматически.

Используйте этот кодовый блок в качестве примера для других вариантов. И не забудьте удалить три "открытые" строки из начала вашего кода :)