Python Pickle加载目录中的所有.pkl文件

Python Pickle加载目录中的所有.pkl文件,python,python-3.x,windows-7,pickle,Python,Python 3.x,Windows 7,Pickle,我正在用Python3.3为Windows7制作一个联系人簿应用程序。我正在pickle文件(.pkl)中存储联系人信息。我想加载文件夹中的所有pkl文件,并用pickle加载它们,同时用GUI显示所有联系人的目录。以下是我到目前为止加载文件夹中所有pickle文件的代码: for root, dirs, files, in os.walk("LIP Source Files/Contacts/Contact Book"): for file in files: if f

我正在用Python3.3为Windows7制作一个联系人簿应用程序。我正在pickle文件(.pkl)中存储联系人信息。我想加载文件夹中的所有pkl文件,并用pickle加载它们,同时用GUI显示所有联系人的目录。以下是我到目前为止加载文件夹中所有pickle文件的代码:

for root, dirs, files, in os.walk("LIP Source Files/Contacts/Contact Book"):
    for file in files:
        if file.endswith(".pkl"):
           contacts = file
           print(contacts)
           opencontacts = open(os.getcwd() + "/LIP Source Files/Contacts/Contact Book/" + contacts, 'rb')
           loadedcontacts = pickle.load(contacts)
           print(loadedcontacts)
       else:
          lipgui.msgbox("No contacts found!")
以下是lipgui.choicebox()的代码:


你的问题已经可以加载联系人了。行
loadedcontacts=pickle.load(contacts)
是一个很好的方法。但是,
pickle.load
需要打开的文件而不是文件名。因此,您不是传递
联系人
,而是传递
opencontacts

通过在外部循环之前创建列表,可以将联系人保存在列表中:

allcontacts = [] # Creates an empty list
for root, dirs, files in os.walk("LIP Source Files/Contacts/Contact Book"):
    # Omitted
然后,您将取消勾选的每个联系人附加到该列表:

            loadedcontacts = pickle.load(opencontacts)
            allcontacts.append(loadedcontacts)

顺便说一句:当你不再需要打开的文件时,你应该关闭它。在本例中,这意味着您在调用
loadedcontacts=pickle.load(opencontacts)
后调用了
opencontacts.close()
,您的帖子实际上不包含任何问题。(至少我没有找到。)请给出一些具体的信息,你想知道的。我只是想知道如何pickle。加载文件夹中的所有pkl文件,并在GUI中单独显示它们!使用
pickle.load
取消勾选(就像您在评论中指出的那样)并在GUI中显示它取决于您用于GUI的库,如果没有更多信息就无法回答。那么我该怎么做呢?可能吗?什么?取消闪烁还是显示?对于不挑剔的人:就像你一样<代码>加载的联系人=pickle.load(联系人)。然后,
loadedcontacts
是您的已加载、未点击的联系人。对于展示,我已经说过,如果没有更多的信息,这里无法回答这个问题。谢谢。愚蠢的错误!有没有办法为每个联系人创建一个变量,而不管有多少联系人?我正在尝试了解GUI显示。更新了答案以显示如何将所有联系人保存在列表中。现在我有了列表,如何将每个文件列为条目?例如:我用这一行来显示列表lipgui.choicebox中的联系人(“选择要查看的联系人:”,choices=[allcontacts])。我如何设置格式,以便将每个联系人显示为单独的联系人。顺便说一下,谢谢你的编辑!现在,它只显示一个条目和列表。
            loadedcontacts = pickle.load(opencontacts)
            allcontacts.append(loadedcontacts)