列表的应用实例——用Python实现简单的通讯录

Python3 列表

序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

Python有6个序列的内置类型,但最常见的是列表和元组。

序列都可以进行的操作包括索引,切片,加,乘,检查成员。

此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

列表的数据项不需要具有相同的类型

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

list1 = ['Google', 'Runoob', 1997, 2000];

list2 = [1, 2, 3, 4, 5 ];

list3 = ["a", "b", "c", "d"];

与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。

pickle 模块

python的pickle模块实现了基本的数据序列和反序列化。

通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。

通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

基本接口:

pickle.dump(obj, file, [,protocol])

有了 pickle 这个对象, 就能对 file 以读取的形式打开:

x = pickle.load(file)

注解:从 file 中读取一个字符串,并将它重构为原来的python对象。

 

下面以简单的通讯录为例,简要介绍pickle和列表


import os
import pickle

datafile='person.data'
line='---------------------------------------'
message='''
---------------------------------------
    目 录
按0:显示列表
按1:增加联系人
按2:编辑联系人
按3:删除联系人
按4:搜索联系人
按5:显示目录
按6:退出
---------------------------------------
'''
print(message)


        
    
def read_data (filename=datafile):
    if os.path.exists(filename) and os.path.getsize(filename):
        with open(filename,'rb') as f:
            return pickle.load(f)
    return None

def write_data (name,number,filename=datafile):
    personlist={} if read_data () == None else read_data()#
    with open(filename,'wb') as f:
        personlist[name]=Person(name,number)
        pickle.dump(personlist,f)


class Person(object):
    def __init__(self,name,number):
        self.name=name
        self.number=number


def save_data(dictPerson,filename=datafile):
    with open(filename,'wb') as f:
        pickle.dump(dictPerson,f)


def display_all_person():
    personlist=read_data()
    if personlist:
        for v in personlist.values():
           # print('%s     %s' %(keys,values))
           print(str(v.name).ljust(10),str(v.number).ljust(11))
        print(line)
    else:
        print('')
        print('无联系人,现在就添加?')
        flag1=int(input('添加->1,取消->2  '))
        if flag1==1:
            name=input('输入姓名:')
            number=input('输入号码:')
            add_person(name,number)
        elif flag1==2:
            print('已取消')
            print(line)

def add_person(name,number):
    write_data(name,number)
    print('添加成功')
    print(line)


def edit_person(name):
    personlist=read_data()
    if personlist:
        if name in personlist.keys():
            #name=input('输入姓名:')
            number=input('输入号码:')
            personlist[name]=Person(name,number)
            save_data(personlist)
            print('编辑成功')
            print(line)
        else:
            print(name,'不在通讯录中,是否添加?')
            flag3=int(input('添加->1,取消->2  '))
            if flag3==1:
                #name=input('输入姓名:')
                number=input('输入号码:')
                add_person(name,number)
            elif flag3==2:
                print('已取消')
                print(line)
       

def del_person(name):
    personlist=read_data()
    if personlist:
        if name in personlist:
            flag=int(input('确认删除吗?确认->1,取消->2  '))
            if flag==1:
                del personlist[name]
                save_data(personlist)
                print('删除成功')
            elif flag ==2:
                print('已取消')
                #print(message)    
        else:
            print(name,'不在通讯录中。')
    print(line)


def search_person(name):
    personlist=read_data()
    if personlist:
        if name in personlist.keys():
            print('')
            print(str('姓名').ljust(8),str('号码').ljust(9))
            print(str(personlist.get(name).name).ljust(10),str(personlist.get(name).number).ljust(11))
            print(line)
        else:
            print(name,'不在通讯录中,是否添加?')
            flag2=int(input('添加->1,取消->2  '))
            if flag2==1:
                #name=input('输入姓名:')
                number=input('输入号码:')
                add_person(name,number)
            elif flag2==2:
                print('已取消')
                print(line)


while True:
    num = input('->')

    if num == '0':
        print(line)
        print('显示联系人')
        print(str('姓名').ljust(8),str('号码').ljust(9))
        display_all_person()
        #print(line)
    elif num =='1':
        print(line)
        print('增加联系人')
        name=input('输入姓名:')
        number=input('输入号码:')
        add_person(name,number)
    elif num=='2':
        print(line)
        print('编辑联系人')
        name=input('输入姓名:')
        #number=input('输入号码:')
        edit_person(name)
    elif num=='3':
        print(line)
        print('删除联系人')
        name=input('输入姓名:')
        del_person(name)
    elif num=='4':
        print(line)
        print('搜索联系人')
        name=input('输入姓名:')
        search_person(name)
    elif num=='5':
        print(message)
    elif num=='6':
        break
    else:
        print('错误!请重新输入->')
               
    
    
    
        
    
        

运行结果图

列表的应用实例——用Python实现简单的通讯录_第1张图片

列表的应用实例——用Python实现简单的通讯录_第2张图片

列表的应用实例——用Python实现简单的通讯录_第3张图片

你可能感兴趣的:(Python,pickle,python,列表)