Я оставлю это здесь для архива и прочее, но обновит код ниже до рабочего, так как я смог исправить свою проблему (если какой-либо пользователь linux читает это, возможно, вы можете помочь мне с поддержкой Linux или тестом, если метод окна работает для вассохранение и загрузка данных с помощью json или pickle
его все, что я являюсь unexpirienced и не родным английским человеком.
Я написал небольшую таблицу времени и попал в точку, где я хотел сохранить данные, введенные пользователем для следующего выполнения программы. Поэтому я немного экспериментировал с json/pickle и не получил действительно много, поэтому я попрошу помочь :). Я знаю, что мне нужно изменить каждый init() после того, как у меня появился способ загрузки, но я попытаюсь создать пустой стандартный файл для случая отсутствия сохраненных данных. Я также знаю, что метод save() имеет ужасное имя, потому что он не сохраняет его, только возвращает данные. Я также знаю, что код кода не является английским, но я могу переводить по запросу, и так как это s not really about the cod it self (even though I am glad of feedback) only about the save/load of data I guess it
s нормально. В процессе работы с его кодом я дошел до вопроса (ну собственно 2). Как я могу сохранить данные, введенные пользователем/которые автоматически сгенерированы в список списков, каждый из которых содержит 11 dicts? (из формата: 1 неделя с 5 днями и 11 часами каждый) и будет загружать() работу, если я могу сохранить данные как это? мой код Здесь `s:
# -*- coding: UTF8 -*-
#!/usr/bin/env python3
import os
import platform
import sys
import json
import pprint
import time
import pickle
class stunde:
def __init__(self):
self.daten = {}
def start(self):
self.daten = {'Fach': " ", 'Raum': " ", 'Lehrer': " "}
def aendern(self,was,information):
if was in self.daten:
self.daten[was] = information
else:
print('Fehler bei der Eingabe bitte auch Groß/Kleinschreibeung beachten')
def anzeigen(self):
print (" ",self.daten)
def save (self):
return self.daten
def load(self,data):
self.daten={}
self.daten=data
def raum(self):
print("Raum : ",self.daten['Raum'])
class tag:
def __init__(self):
self.stunden = []
def start(self):
for i in range(11):
std = stunde()
self.stunden.append(std)
self.stunden.start()
def aendern(self,tagwas,was,information):
if len(self.stunden)>=(tagwas-1):
self.stunden[tagwas-1].aendern(was,information)
else:
print("Dieser tag hat nur " , len(self.stunden) , "Stunden. Bitte eine dieser wählen")
def anzeigen(self):
for i in range(len(self.stunden)):
print(i+1)
self.stunden[i].anzeigen()
def save (self):
datas=[]
for i in range(len(self.stunden)):
datas.append(self.stunden[i].save())
return datas
def load(self,data):
#hier muss 1 liste mit 11 dicts übergeben werden wenn :
for x in data:
t = stunde();
t.load(x);
self.stunden.append(t)
def raum(self):
for i in range(len(self.stunden)):
print(i+1),self.stunden[i].raum()
class woche:
def __init__(self):
self.tage = []
self.start()
def start(self):
laufpfad=os.path.dirname(sys.argv[0])
dateiposition="\datas\data"
checkpfad="".join((laufpfad,dateiposition))
if os.path.exists(checkpfad)==True:
with open(checkpfad,"rb") as filename:
data=pickle.load(filename)
self.load(data)
print("Daten erfolgreich geladen")
else:
for i in range(5):
day = tag()
self.tage.append(day)
self.tage.start()
print("Keine Daten gefunden")
def aendern(self,wochewas,tagwas,was,information):
if len(self.tage)>=(wochewas-1):
self.tage[wochewas-1].aendern(tagwas,was,information)
else:
print("Diese Woche hat nur " , len(self.tage) , "Tage zur Auswahl. Bitte einen dieser wählen")
def anzeigen(self , ouf = sys.stderr):
for i in range(len(self.tage)):
if i == 0 :
print("Montag ",file = ouf),self.tage[0].anzeigen()
if i == 1 :
print("Dienstag ",file = ouf),self.tage[1].anzeigen()
if i == 2 :
print("Mittwoch ",file = ouf),self.tage[2].anzeigen()
if i == 3 :
print("Donnerstag ",file = ouf),self.tage[3].anzeigen()
if i == 4 :
print("Freitag ",file = ouf),self.tage[4].anzeigen()
def save(self):
aktuell = platform.system()
if aktuell=='Windows':
print("Windows detected as OS!")
ordner=os.path.dirname(sys.argv[0])
neuerordner=os.path.join(ordner,"datas")
if os.path.exists(neuerordner)== False:
os.mkdir(neuerordner)
else:
data =[]
for i in range(len(self.tage)):
it=self.tage[i].save()
data.append(it)
neuerpfad=os.path.join(neuerordner,"data")
with open(neuerpfad,"wb") as filename:
data2save=data
pickle.dump(data2save,filename)
filename.close
print("Daten erfolgreich gespeichert")
elif aktuell=='Linux':
print("Linux detected as OS")
else:
print("Dein Betriebssystem ,",aktuell,"wird leider nicht unterstützt")
def load(self,data):
pprint.pprint(data)
print("#################################")
#hier liegt ein FEHLER die daten werden fehlerhaft eingelesen oder garnicht
for x in data:
t = tag();
t.load(x);
self.tage.append(t)
def raum(self , ouf = sys.stderr):
for i in range(len(self.tage)):
print("Tag ", i+1 , file = ouf),self.tage[i].raum()
def main():
week=woche()
eingabe = ""
while 1:
print()
print(" Eintragungen zu einem (T)ag ändern? ")
print(" Wochenplanplan (a)nzeigen? ")
print(" (R)aumplan der Woche anzeigen")
print(" Einen (b)estimmten Tag anzeigen?")
print(" Den Raumplan (f)ür einen bestimmten Tag anzeigen?")
print(" (E)nde? ")
print()
eingabe = input(' Ihre Wahl? ')
print()
if eingabe in ['t','T']:
while True:
wochewas =(input('Welchen Tag wollen Sie bearbeiten? (Bitte Zahl angeben!) '))
try:
wochewas = int(wochewas)
break
except ValueError :
print("Nur Zahlen eingeben bitte")
while True :
tagwas = (input('Welche Stunde wollen Sie bearbeiten? (Bitte Zahl angeben!) '))
try:
tagwas = int(tagwas)
break
except ValueError :
print("Nur Zahlen eingeben bitte")
stdwas = input('Welche Information wollen Sie eintragen? (Fach, Raum oder Lehrer?) ').title()
inf = input('Was soll eingetragen werden?(Maximal 4 Zeichen) ')[:4].ljust(4)
week.aendern(wochewas,tagwas,stdwas,inf)
elif eingabe in ['a','A']:
week.anzeigen()
elif eingabe in ['r','R']:
week.raum()
elif eingabe in ['b','B']:
while True:
was=input("Welchen Tag wollen sie anzeigen lassen ? (Nur Zahlen bitte !")
try:
was=int(was)
break
except ValueError:
print("Nur Zahlen eingeben bitte!")
week.tage[was-1].anzeigen()
elif eingabe in ['f','F']:
while True:
was=input("Von welchem Tag wollen sie den Raumplan anzeigen lassen ?(Nur Zahlen bittte!)")
try:
was=int(was)
break
except ValueError:
print("Nur Zahlen bitte!")
week.tage[was-1].raum()
elif eingabe in["e","E"]:
warten=input('Bitte nochmal Enter drücken! ')
week.save()
time.sleep(1)
print("Bye Bye")
#sys.exit()
os._exit(0)
elif eingabe in ['s','S']:
week.save()
elif eingabe in ['l','L']:
pfad=os.path.dirname(sys.argv[0])
datas=r"\datas"
data=r"\data"
echterpfad="".join((pfad,datas,data))
with open(echterpfad,"rb") as file:
weekdata=pickle.load(file)
#pprint.pprint(weekdata)
week.load(weekdata)
else :
print("Bitte ein Buchstaben aus den Klammern oben wählen!")
print("Ihr Stundenplaner wurde geladen!")
main()
Вы должны разместить свой код здесь: 1) редактировать свой пост и вставить код в, 2) выберите свой код и нажмите Ctrl + K (или Command + K на Mac) –
сделано :), но я подумал, что подсветка pb более приятная. – Astrionn