我決定爲個人需求創建一個小跟蹤列表。 我創建了兩個主要類來存儲和處理數據。第一個代表主題和練習列表。第二個代表練習列表中的每個練習(主要是兩個變量,全部(全部)答案和正確答案)。擱架(或泡菜)不能正確保存對象字典。它只是丟失了數據
class Subject:
def __init__(self, name):
self.name = name
self.exercises = []
def add(self, exc):
self.exercises.append(exc)
# here is also "estimate" and __str__ methods, but they don't matter
class Exercise:
def __init__(self, good=0, whole=20):
self._good = good
self._whole = whole
def modify(self, good, whole=20):
self._good = good
self._whole = whole
# here is also "estimate" and __str__ methods, but they don't matter
我定義了一個字典,主題爲實例填充它,它轉移到貨架文件並保存它。
with shelve.open("shelve_classes") as db:
db.update(initiate())
這裏的表示(啓動狀態):
#Comma splices & Fused sentences (0.0%)
#0/20 0.0%
#0/20 0.0%
#0/20 0.0%
#0/20 0.0%
#0/20 0.0%
在那之後,我試圖重新打開傾倒文件和更新一些的值。
with shelve.open('shelve_classes') as db:
key = 'Comma splices & Fused sentences'
sub = db[key]
sub.exercises[0].modify(18)
db[key] = sub
看起來沒問題,讓我們回顧一下吧:
print(db[key])
#Comma splices & Fused sentences (18.0%)
#18/20 90.0%
#0/20 0.0%
#0/20 0.0%
#0/20 0.0%
#0/20 0.0%
但是當我關閉文件,下一次我打開它,它回來了啓動狀態,所有的修正損失。即使用泡菜試過,也不在那兒工作。無法弄清楚,爲什麼它不保存數據。
是的,它的工作原理,謝謝。其實發現了我的代碼的另一個問題。所有這些操作我在單獨的文件中完成,當我用'pickle'嘗試時,解釋器要求我將定義的類導入到工作文件中。我做到了,但後來決定用'shelve'重寫所有內容,並忘記刪除導入的代碼。這不知何故影響到外流。所有更改都保存到文件中,但是當我嘗試重新運行腳本時,輸出會以某種方式將原始數據(來自'shelve')替換爲導入的類並顯示啓動狀態。不知道,它是什麼意思。不管怎樣,謝謝你。 – tidylobster