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