python程序未打印所有pickle文件数据

python程序未打印所有pickle文件数据,python,python-3.x,pickle,Python,Python 3.x,Pickle,我正在做一个测验,并试图打印测验的数据。问题是,即使文件中存在多个分数或名称,它也只会打印一个名称和一个分数。您正在通过添加新的pickle来写入文件。加载代码只加载第一个pickle,因此您创建的第一个条目 您将需要始终使用“wb”,用新版本的词典替换磁盘上的数据 尝试使用'ab'追加模式读取写入文件的其他pickle没有什么意义;这些都是同一本词典后来的修订本。您必须只读取最后一个文件,这与每次更新字典时只替换整个文件相比效率低下。您应该使用如果不存在文件:和如果存在文件:来测试布尔值;与=

我正在做一个测验,并试图打印测验的数据。问题是,即使文件中存在多个分数或名称,它也只会打印一个名称和一个分数。

您正在通过添加新的pickle来写入文件。加载代码只加载第一个pickle,因此您创建的第一个条目

您将需要始终使用
“wb”
,用新版本的词典替换磁盘上的数据


尝试使用
'ab'
追加模式读取写入文件的其他pickle没有什么意义;这些都是同一本词典后来的修订本。您必须只读取最后一个文件,这与每次更新字典时只替换整个文件相比效率低下。

您应该使用
如果不存在文件:
如果存在文件:
来测试布尔值;与
==
进行比较容易出错(您可以很容易地链接比较)。在这种情况下,您甚至不需要测试文件是否存在。只需使用
'ab'
,如果文件还不存在,它将创建该文件。
testdata = {}
testdata[Name] = Score
fileexists = os.path.isfile('TestResults- Class '+classnumber)
if fileexists == False:
    open('TestResults- Class '+classnumber,mode="w+")
    mypicklefile = open('TestResults- Class '+classnumber,mode="wb")
    pickle.dump(testdata,mypicklefile)
    mypicklefile.close()
elif fileexists == True:
    mypicklefile = open('TestResults- Class '+classnumber,mode="ab")
    pickle.dump(testdata,mypicklefile)
def teacher():
    classchoice = input('what class would you like to see?: ')
    readablefile = open('TestResults- Class '+classchoice,mode="rb")
    datafile = pickle.load(readablefile)
    for name in sorted(datafile):
            print(name, datafile[name])