Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 遍历pickle加载的对象列表_Python_Pickle - Fatal编程技术网

Python 遍历pickle加载的对象列表

Python 遍历pickle加载的对象列表,python,pickle,Python,Pickle,在游戏的一个部分,我正在创建一个用户输入用户名。用户名和用户的分数保存在一个对象中,该对象被pickle到一个包含其他pickle分数对象的外部文件中 然后,我在UI上有一个按钮,如果单击该按钮,将按降序显示所有玩家的最高分数 我将文件加载到一个包含我找到的代码的列表中 然后,我使用冒泡排序对如下所示的对象列表进行排序 def bubbleSort(): swapOccured = True while swapOccured == True: swapOccur

在游戏的一个部分,我正在创建一个用户输入用户名。用户名和用户的分数保存在一个对象中,该对象被pickle到一个包含其他pickle分数对象的外部文件中

然后,我在UI上有一个按钮,如果单击该按钮,将按降序显示所有玩家的最高分数

我将文件加载到一个包含我找到的代码的列表中

然后,我使用冒泡排序对如下所示的对象列表进行排序

def bubbleSort():
    swapOccured = True
    while swapOccured == True:
        swapOccured = False
        for i in Highscores:
            if Highscores[i].score > Highscores[i + 1].score:
                hold = Highscores[i + 1]
                Highscore[i + 1] = Highscores[i]
                Highscores[i] = Highscores[i + 1]
                swapOccured = True
返回的错误为

for index in Highscores:
TypeError: iteration over non-sequence
例如,我已经研究了其他类似的问题,但错误是程序在对象中循环,而不是在对象列表中循环。我很确定这和示例中的错误不一样,我想可能是加载了一个带有pickle的对象列表,但我被卡住了


任何帮助都将不胜感激。

就像
pickle.dump
将单个对象转储到文件一样,
pickle.load
从文件中加载单个对象。如果您想要一个列表,则需要加载所有列表:

with open("Highscores.txt", "rb") as score_file:
    Highscores = []
    while True:
        try:
            Highscores.append(pickle.load(score_file))
        except EOFError:
            break

就像
pickle.dump
将单个对象转储到文件一样,
pickle.load
从文件中加载单个对象。如果您想要一个列表,则需要加载所有列表:

with open("Highscores.txt", "rb") as score_file:
    Highscores = []
    while True:
        try:
            Highscores.append(pickle.load(score_file))
        except EOFError:
            break

在加载pickle之前,将Highscores定义为一个列表不会改变加载对象时对象的状态;它只是覆盖上一个值。显然,保存在泡菜里的东西并不是一张清单。@DanielRoseman是的。我想我是在向pickle添加对象,就像它是一个列表一样,但事实并非如此。这是我用来转储它的代码
currScore=calculateScore()
currUser=tkSimpleDialog.askstring(“,”请输入用户名:”)
newHighscore=scoreEntry(currScore,currUser)
打开(“Highscores.txt”,“ab”)作为f:pickle.dump(NewHighScores,f)
在加载pickle之前将Highscores定义为一个列表不会改变加载对象时对象的状态;它只是覆盖上一个值。显然,保存在泡菜里的东西并不是一张清单。@DanielRoseman是的。我想我是在向pickle添加对象,就像它是一个列表一样,但事实并非如此。这是我用来转储它的代码
currScore=calculateScore()
currUser=tkSimpleDialog.askstring(“,”请输入用户名:”)
newHighscore=scoreEntry(currScore,currUser)
打开(“Highscores.txt”,“ab”)作为f:pickle.dump(NewHighScores,f)