【问题标题】:Pickle Load all of the .pkl files in the directoryPickle 加载目录中的所有 .pkl 文件
【发布时间】:2014-04-15 08:10:58
【问题描述】:

我正在为 Windows 7 使用 Python 3.3 制作通讯录应用程序。我将联系人信息存储在 pickle 文件 (.pkl) 中。我想加载文件夹中的所有 pkl 文件并用 pickle 加载它们,并使用我的 GUI 显示所有联系人的目录。到目前为止,这是我加载文件夹中所有泡菜文件的代码:

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() 的代码:

     def choicebox(msg="Pick something."
, title=" "
, choices=()
):
"""
Present the user with a list of choices.
return the choice that he selects.
return None if he cancels the selection selection.

@arg msg: the msg to be displayed.
@arg title: the window title
@arg choices: a list or tuple of the choices to be displayed
"""
if len(choices) == 0: choices = ["Program logic error - no choices were specified."]

global __choiceboxMultipleSelect
__choiceboxMultipleSelect = 0
return __choicebox(msg,title,choices)

【问题讨论】:

  • 您的帖子实际上不包含任何问题。 (至少我没有找到。)请提供一些具体信息,你想知道的。
  • 我只是想知道如何 pickle.load 文件夹中的所有 pkl 文件并在 GUI 中单独显示它们!
  • 使用pickle.load 完成解酸(就像您在评论中已经指出的那样)并在您的 GUI 中显示它取决于您用于 GUI 的库,没有更多就无法回答信息。
  • 那我该怎么做呢?有可能吗?
  • 什么?解封还是展示?对于Unpickling:就像你一样。 loadedcontacts = pickle.load(contacts)。然后loadedcontacts 是您加载的、未腌制的联系人。对于显示,我已经说过,如果没有更多信息,这里无法回答。

标签: python python-3.x windows-7 pickle


【解决方案1】:

您的问题已经做了一些加载联系人的工作。 loadedcontacts = pickle.load(contacts) 行是一个好方法。但是pickle.load 需要打开的文件而不是文件名。所以不要传递contacts,而是传递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()

【讨论】:

  • 有什么方法可以为每个联系人创建一个变量,不管有多少?我现在正试图弄清楚 GUI 显示。
  • 更新了答案以显示如何将所有联系人保存在列表中。
  • 现在我有了列表,如何将每个文件列为条目?例如:我有这一行来显示列表中的联系人 lipgui.choicebox("Select a contact to view:",choices=[allcontacts]) 如何设置格式,以便将每个联系人显示为单独的联系人。顺便感谢您的编辑!
  • 现在,它只是在列表中显示一个条目。
  • 这取决于您使用的 GUI 库。图书馆的文档可能是一个很好的起点。或者你告诉我们你正在使用什么库。 (搜索“python lipgui”没有给我相关结果。)
猜你喜欢
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 1970-01-01
  • 2010-10-17
  • 2020-07-17
相关资源
最近更新 更多