Сохранение веденных данных и последующий вывод
Пишу консольную программу, и пока решил не прибегать к использованию библиотек для сохранения данных по типу db.
Сама задача: мне нужно что бы когда я ввожу данные при sign up в t.teacher_information_input() веденные данные куда либо сохранялись, и после я мог их вывести при помощи PrettyTable(). А так выходит что данные записываются в том же t.teacher_information_input() но после я не могу их вывести никак и выводится это:
Плюс нужно сделать так что бы туда сохранялась информация после закрытия программы, и с двух классов, т е при использовании функций s.student_information_input() и t.teacher_information_input()
Можно ли это реализовать без использования баз данных?
Сразу пришла идея использования текстовых файлов, но тут возникает проблема в том что я не знаю как оттуда извлекать нужную мне информацию. К примеру если при использовании sign in нужно ввести данные, и исходя из них выдается ошибка или предоставляется доступ, то мне нужно взять из файла не все 6 параметров, а только несколько определенных....
main.py:
from prettytable import PrettyTable
from textblob import TextBlob
import sys
pt = PrettyTable(field_names=["name", "surname", "patronymics", "age", "position", "gender"])
class Teacher():
def teacher_information_input(self):
self.tname = str(input("Enter teacher's name: "))
self.tsurname = str(input("Enter teacher's surname: "))
self.tpatronymics = str(input("Enter teacher's patronymics: "))
self.tage = float(input("Enter teacher's age: "))
self.trank = str(input("Enter teacher's rank: "))
self.tgender = str(input("Enter teacher's gender: "))
def show_teacher_information(self):
print(pt)
def add_teacher_information(self):
pt.add_row(self.tname)
pt.add_row(self.tsurname)
pt.add_row(self.tpatronymics)
pt.add_row(self.tage)
pt.add_row(self.trank)
pt.add_row(self.tgender)
def delete_teacher_information(self):
print("Nothing here yet")
def teacher_salary(self):
print("Nothing here yet")
class Student():
def student_information_input(self):
self.ssname = str(input("Enter student's name: "))
self.ssurname = str(input("Enter student's surname: "))
self.spatronymics = str(input("Enter student's patronymics: "))
self.sage = float(input("Enter student's age: "))
self.sstudy_year = int(input("Enter student's studying year: "))
self.sgender = str(input("Etner student's gender: "))
def show_student_information(self):
print("Name: " + self.sname)
print("Surname: " + self.ssurname)
print("Patronymics: " + self.spatronymics)
print("Age: " + self.sage)
print("Rank: " + self.srank)
print("Gender: " + self.sgender)
def add_student_information(self):
print("Nothing here yet")
def delete_student_information(self):
print("Nothing here yet")
'''
def correct(string): # function to correct words in inputted string
string_list = (string.split(" "))
correct_list = []
for word in string_list:
correct_list.append(TextBlob(word))
for word in correct_list:
word.correct()
'''
if __name__ == '__main__':
t = Teacher()
s = Student()
print("-------------------------------")
print("Input:\n Sign up\n Sign in\n Exit")
while(True):
choice = str(input("Choice: "))
choice.casefold() # converting string into lowercase
# correct(choice) # using correct function described above to correct a string if needs
if choice == "exit":
sys.exit()
else:
if choice == "sign up":
print("Student | Teacher: ")
pos_input = str(input("Position: "))
if pos_input == "teacher":
t.teacher_information_input()
elif pos_input == "student":
s.student_information_input()
elif choice == "sign in":
print("Student | Teacher: ")
pos_input = str(input("Position: "))
if pos_input == "teacher" or "Teacher":
t.show_teacher_information()
elif pos_input == "student" or "Student":
s.show_student_information()
Ответы (1 шт):
Для сохранения можно использовать вариант с сериализацией:
import pickle
# Какие-то данные...
data = {1: "Первый", 2: "Второй", "name": "user"}
# Сохраняем в файл
with open('data.backup', 'wb') as f:
pickle.dump(data, f)
# Загружаем из файла
with open('data.backup', 'rb') as f:
load_data = pickle.load(f)
print(load_data)
Немного переписал класс так как он ничего не выводит.
class Teacher():
def teacher_information_input(self):
self.tname = str(input("Enter teacher's name: "))
self.tsurname = str(input("Enter teacher's surname: "))
self.tpatronymics = str(input("Enter teacher's patronymics: "))
self.tage = float(input("Enter teacher's age: "))
self.trank = str(input("Enter teacher's rank: "))
self.tgender = str(input("Enter teacher's gender: "))
# Добавил такой код
def show_teacher_information(self):
print(self.tname)
print(self.tsurname)
print(self.tpatronymics)
print(self.tage)
print(self.trank)
print(self.tgender)
def add_teacher_information(self):
pt.add_row(self.tname)
pt.add_row(self.tsurname)
pt.add_row(self.tpatronymics)
pt.add_row(self.tage)
pt.add_row(self.trank)
pt.add_row(self.tgender)
def delete_teacher_information(self):
print("Nothing here yet")
def teacher_salary(self):
print("Nothing here yet")
В основном цикле:
if __name__ == '__main__':
t = Teacher()
s = Student()
print("-------------------------------")
print("Input:\n Sign up\n Sign in\n Exit")
while(True):
choice = str(input("Choice: "))
choice.casefold() # converting string into lowercase
# correct(choice) # using correct function described above to correct a string if needs
if choice == "exit":
sys.exit()
else:
if choice == "sign up":
print("Student | Teacher: ")
pos_input = str(input("Position: "))
if pos_input == "teacher":
t.teacher_information_input()
with open('data.backup', 'wb') as f: #Сохраним данные
pickle.dump(t, f)
elif pos_input == "student":
s.student_information_input()
elif choice == "sign in":
print("Student | Teacher: ")
pos_input = str(input("Position: "))
if pos_input == "teacher" or "Teacher":
with open('data.backup', 'rb') as f: # Получаем сохраненные данные
load_data2 = pickle.load(f)
t = load_data2 # Состояние ВСЕГО класса становится = дампу
t.show_teacher_information()
elif pos_input == "student" or "Student":
s.show_student_information()
Не стал разбираться в работе PrettyTable но с выводом информации у вас ошибка. Для наглядности поменял на простые принты. Ну и данные сохраняются для teacher студент делается по аналогии.
