2015-11-20 36 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

啊,谢谢杰夫,你是对的。我太快浏览了这个问题;为我服务的权利。 –