【发布时间】:2015-01-12 17:23:40
【问题描述】:
我将把它留在这里用于存档和其他东西,但我会将下面的代码更新为可以工作的代码,因为我能够解决我的问题(如果任何 linux 用户阅读此内容,也许你可以帮助我提供 linux 支持或测试 windows 方法是否适合您
首先,我是一个没有经验的人,不是以英语为母语的人。
我写了一个小时间表,然后我想保存用户输入的数据,以便下次执行程序。所以我用 json / pickle 做了一些实验,但并没有走得太远,所以我要请求帮助:)。我知道在获得加载方法后我必须更改每个 init() 但我会尝试为没有保存数据的情况生成一个空的标准文件。我也知道方法 save() 有一个可怕的名字,因为它不保存它只返回 data 。我也知道代码不是英文的,但我可以根据要求翻译,因为 its not really about the cod it self (even though I am glad of feedback) only about the save/load of data I guess its 可以。在使用代码的过程中,我遇到了一个问题(实际上是 2)如何将用户输入/自动生成的数据保存到每个 11 个 dicts 的列表列表中? (格式为:1 周,每周 5 天 11 小时)如果我能够像这样保存数据,load() 会起作用吗?
这是我的代码:
# -*- 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(或 Mac 上的 Command+K)
-
完成 :) 但我认为 pb-highlighting 更好
标签: python json load save pickle