使用Python的pickle打开并保存字典

2024-06-08 01:15:01 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的comp-sci入门课的最后几天里,我们要创建字典。书中的家庭作业程序要求我们创建一些可以查找、添加、更改和删除一组姓名和电子邮件地址的内容。它要求我们对字典进行pickle操作,但对我来说更重要的是,它规定每次程序启动时,它都应该从文件中检索字典并取消对它的pickle操作。我不知道我是否把自己编入了一个角落,但我不知道如何利用我目前所做的来做到这一点。

我的代码:

import mMyUtils
import pickle
LOOK_UP = 1
ADD = 2
CHANGE = 3
DELETE = 4
QUIT = 5

def main():
    emails = {}
    choice = 0
    while choice != QUIT:
        choice = getMenuChoice()
        if choice == LOOK_UP:
            lookUp(emails)
        elif choice == ADD:
            add(emails)
        elif choice == CHANGE:
            change(emails)
        elif choice == DELETE:
            delete(emails)
        else:
            exit

def getMenuChoice():
    print()
    print('Name and Email Address Catalog')
    print('------------------------------')
    print('1. Look up an email address')
    print('2. Add a new email address')
    print('3. Change an email address')
    print('4. Delete an email address')
    print('5. Quit the program')
    print()

    choice = int(input('Enter the choice: '))
    while choice < LOOK_UP or choice > QUIT:
        choice = int(input('Enter a valid choice: '))

    return choice

def lookUp(emails):
    name = input('Enter a name: ')
    print(emails.get(name, 'Not found.'))

def add(emails):
    name = input('Enter a name: ')
    address = input('Enter an email address: ')
    if name not in emails:
        emails[name] = address
        pickle.dump(emails, open("emails.dat", "wb"))
    else:
        print('That entry already exists.')

def change(emails):
    name = input('Enter a name: ')
    if name in emails:
        address = input('Enter the new address: ')
        emails[name] = address
        pickle.dump(emails, open("emails.dat", "wb"))
    else:
        print('That name is not found.')

def delete(emails):
    name = input('Enter a name: ')
    if name in emails:
        del emails[name]
    else:
        print('That name is not found.')

main()

我知道我应该将emails变量设置为pickle.load的某种形式,但我一辈子都搞不懂。mMyUtils是我为try/except logic创建的一个库,一旦新的东西开始工作,我就把它放进去。


Tags: nameaninputif字典addressemaildef

热门问题