从文件存取字典,涉及到几个内置函数,对格式的控制

来源:互联网 发布:巴洛克的艺术风格 知乎 编辑:程序博客网 时间:2024/06/05 15:07
dbfilename = 'people-file'ENDDB = 'enddb.'  #定义结尾符ENDREC = 'endrec.'#定义间隔符RECSEP = '=>'  #定义对应符db = {'zhang':{'age':19,'job':'student','wage':5000},      'zhu':{'age':20,'job':'engineer','wage':6000},      'liu':{'age':29,'job':'sailsman','wage':10000}}def (db,dafilename = dbfilename):    dbfile = open(dbfilename,'w')           #创建文件对象    for key in db:        print(key,file=dbfile)        for (name,value) in db[key].items():#将字典里每一对元素提取出来            print(name+RECSEP+repr(value),file=dbfile)#打印出来,输出到文件里        print(ENDREC,file=dbfile)    print(ENDDB,file=dbfile)    dbfile.close()def (dbfilename = dbfilename):    dbfile = open(dbfilename)    import sys    sys.stdin = dbfile  #重定向输入流,从文件读取    db = {}    key = input()       #输入大键值    while key != ENDDB:        rec = {}        field = input()        while field != ENDREC:            name,value = field.split(RECSEP)#输入小键值加值            rec[name] = eval(value)         #将值以正确的格式赋给键值            field = input()        db[key] = rec        key = input()    return db           #返回数据对象if __name__ == '__main__':#以脚本运行时执行以下函数    storeDbase(db)    showdb = loadDbase()    print(showdb) 结果:C:\Python34\python.exe D:/pycharm/one.py{'zhang': {'job': 'student', 'age': 19, 'wage': 5000}, 'liu': {'job': 'sailsman', 'age': 29, 'wage': 10000}, 'zhu': {'job': 'engineer', 'age': 20, 'wage': 6000}}Process finished with exit code 0几个重点:关于内置函数print(),默认参数如下:print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)需要输出的对象,间隔符,结尾符,输出流文件,是否作缓存本例中需要将字典以特定的分隔符/结尾符输出到文件里repr()与str的比较:参考该博客:http://blog.csdn.net/u013961718/article/details/51100464总之,即str是显示给人看的,repr()给python看的例:for (name,value) in a.items():    print(name+"=>"+repr(value))job=>'sailsman' #在python看来他是字符串,因此输出也以该形式输出wage=>10000age=>29for (name,value) in a.items():    print(name+"=>"+str(value))job=>sailsman #输出给用户看,用户只需要关心job是什么,并不用关心他是否是字符串wage=>10000age=>29本例中需要如实输出文件里的内容,因此用repr()。另外不可以直接print(name+"=>"+value),因为value可能是int型数据items()函数将字典里的元素分成每一对:>>>a.items()dict_items([('job', 'sailsman'), ('wage', 10000), ('age', 29)])eval()这里的作用也是起到了格式化的作用,以字符串的形式读进来是这样的:"job=>'student'""wage=>5000"如果直接 rec[name] = value,那么输出就是:'job': "'student'", 'wage': '5000'而加了之后就是:'job': 'student', 'wage': 5000--参考《Python 编程》

原创粉丝点击