2015-11-20 39 views
1

嘿,我正在爲學校的項目工作,我必須問10個數學問題,然後存儲他們的分數名稱和類,但唯一的事情是我似乎無法得到正確的回到工作擱置。下面是代碼即時嘗試去工作任何幫助將是好事。我不能讓我的簡單擱置python腳本工作

global username 
global clss 
global score 
file = shelve.open('score.txt',writeback=True) 
try: 
    file['score'] = (username, score, clss) 
finally: 
    file.close() 

編輯

我試圖做的事情是創建一個腳本,拯救了一個人的分數等級和年齡。錯誤即時得到的是,每次我運行它刪除以前的數據腳本

編輯改變我的代碼

global username 
    global clss 
    global score 
    file = shelve.open('score',writeback=True) 
    try: 
     if 'scores' not in file.keys(): 
      file['score'] = [ (username, score, clss) ] 
     else: 
      file['score'].append((username, score, clss)) 
    finally: 
     file.close() 
+0

回寫用於保留對可變數據結構的更改。您在此處存儲元組,因此回寫不應適用。如果您發佈文件的其餘部分以及您所面對的錯誤是什麼,這將會很有幫助。 –

+0

@jeff carey我得到的錯誤是,它只是重新編寫整個文件與新的很多數據,而不是將其附加到舊的。我想添加更多以相同格式寫入的數據。 –

+0

我想我看到你的問題是...看到我的更新回答下面 –

回答

1

正如我上面提到的,獨自回寫將無法正常工作,如果你只是使用一個元組。如果你想附加一個用戶/分數/類(即主題)元組列表,那就這樣做。 (確保將寫回設置爲true,否則直接調用append不起作用)。

try: 
    if 'scores' not in file.keys(): 
     file['scores'] = [ (username, score, clss) ] 
    else: 
     file['scores'].append((username, score, clss)) 
+0

我已經改變了所有這些東西仍然是同樣的問題,它只是重新權利的文件 –

+0

我把這個在我的代碼,但得到一個長的錯誤代碼:Traceback(最近呼叫的最後一個): 文件「X:\ Programs \ python \ lib \ shelve.py」,行111,在__getitem__ value = self.cache [key] KeyError:'score' –

+0

小心 - 我改名保存的變量爲__scores__以反映它們有多個 –

0

檢查Python文檔中的「打開」。 https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files

還有第二個字段,一個字符串(例如「r +」),它改變文件是附加到,只讀還是重寫。這應該對你有所幫助。

您可能想要在線編輯Python文檔以獲取更多此類問題。

+0

我很欣賞我認爲你的意思,我應該使該文件開放以追加到但它仍然不起作用 –

+0

這是shelve.open()而不是內置open()用於一般文件的讀寫。 –

+0

啊,謝謝傑夫,你是對的。我太快瀏覽了這個問題;爲我服務的權利。 –