Python, pickling list to file

Python, pickling list to file

我在测验挑战中遇到了问题。测验结束后,应将分数和玩家姓名发送到 dat 文件。问题是当我尝试打开保存的文件时,我只看到一条 name:score 记录。哪里出错了? 完整代码:code

在代码中,add_score def 应该将分数保存到列表中,在完成整个代码后我想打开它。有人可以帮助我吗?

def add_score(name,score):
    """
    Dodaje wynik do osobnego pliku .
    :param name:
    :param score:
    :return:
    """

    my_list = []
    scores = (name,score)
    my_list.append(scores)
    with open("score_games.dat", "ab") as f:
        pickle.dump(my_list, f)
    f.close()

然后当我尝试打开乐谱时:

main()
print("Wyniki gry:")
with open("score_games.dat", "rb") as f:
    my_list_1 = pickle.load(f)
    print(my_list_1)


f.close()

这里的问题是,每次调用 add_score() 时,您都会创建一个包含单个条目的全新列表,然后对其进行 pickle。因此,当你加载 pickle 文件时,你会得到最后一个 pickled 列表,它只包含一个条目。

add_score() 应该先加载 pickled 列表,然后将分数添加到其中,然后再 pickle。

def add_score(name,score):
    """
    Dodaje wynik do osobnego pliku .
    :param name:
    :param score:
    :return:
    """

    try:
        # Load the existing list of scores first, if it exists
        with open("score_games.dat", "rb") as f:
            my_list = pickle.load(f)
    except FileNotFoundError:
        my_list = []

    scores = (name,score)
    my_list.append(scores)
    with open("score_games.dat", "ab") as f:
        pickle.dump(my_list, f)
    f.close()